Какой самый простой способ выполнить шифрование с открытым ключом?

328
user4757074

Я подаю заявку на работу, и они попросили меня отправить мой SSN по электронной почте. Назовите меня параноиком, но мне это не нравится.

Итак, я ищу простую форму шифрования с открытым ключом, чтобы не технический специалист отдела кадров мог сгенерировать открытый ключ, отправить его мне, я мог бы зашифровать свой SSN, отправить его, а затем сотрудник отдела кадров мог бы расшифровать с помощью их закрытый ключ.

Возможно, что-то вроде этого сайта http://travistidwell.com/jsencrypt/demo/index.html, но на этом сайте шифрование не работает без закрытого ключа (база и модуль ... вероятно, регенерируются)

0
Не отправляйте SSN, не вводите его в веб-браузере. Позвоните им, не доверяйте им, звонящим вам, убедитесь, что вы связываетесь с нужной компанией. Скажите им SSN по телефону. zaph 7 лет назад 0

2 ответа на вопрос

1
Artjom B.

Какой самый простой способ выполнить шифрование с открытым ключом?

Самый простой для кого? Я думаю, что вы имеете в виду для человека из отдела кадров. Простейший протокол, который я вижу, может быть реализован так, что им нужно только дважды заходить на сайт без каких-либо дополнительных действий с их стороны.

Вам нужно будет создать нестатический сайт на вашем личном сервере, где вы достаточно уверены, что провайдер сервера не смотрит на жесткий диск сервера.

Давайте посмотрим шаги (детали реализации переплетаются с протоколом):

  1. Создайте на своем сервере два загадочных URL-адреса и отправьте первый URL-адрес сотруднику отдела кадров (отныне получателю). Вы просите получателя позвонить вам после того, как он нажмет URL.

  2. Получатель нажимает на URL, и происходит ряд вещей:

    • Сервер проверяет, был ли этот URL запрошен ранее, и покажет ошибку, если таковая была. В этом случае этот процесс должен быть начат снова.

    • Если это первый раз, когда URL вызывается, JavaScript генерирует пару ключей (открытый + закрытый).

      • Открытый ключ отправляется на сервер и сохраняется там, а закрытый ключ хранится в localStorage в браузере получателей.

      • Кроме того, браузер получателей генерирует случайную строку (называемую токеном), сохраняет ее в localStorage и отправляет на сервер, где она хранится.

  3. Теперь получатель звонит вам. В это время вы спрашиваете их, была ли ошибка. Если его не было, вам нужно открыть второй загадочный URL-адрес, созданный на шаге 1. Этот загадочный URL-адрес связан с информацией, полученной от получателя на шаге 2, и содержит форму, в которой вы можете ввести свой SSN.

  4. SSN шифруется с помощью сохраненного открытого ключа, а зашифрованный текст публикуется по третьему загадочному URL-адресу, основанному на маркере из шага 2.

  5. Вы просите получателя снова щелкнуть ссылку и получить страницу с ошибкой, но эта страница с ошибкой быстро скрывается, поскольку в localStorage есть дополнительные значения, что означает, что это допустимый запрос. Браузер получателя делает следующее:

    • Он извлекает токен из localStorage и запрашивает зашифрованный текст.

    • Он извлекает закрытый ключ из localStorage и расшифровывает зашифрованный текст.

    • Он отображает SSN.

Этот протокол решает проблему, заключающуюся в том, что SSN никогда не хранится в открытом виде на сервере, и если кто-нибудь щелкнет ссылку до или после предполагаемого получателя, он ничего не увидит. Хотя это может быть уязвимо для перехвата SSL злоумышленником, и существуют точки входа для социальной инженерии.

Вы можете немного улучшить это, используя длинные опросы или веб-сокеты, если вы не хотите, чтобы получатель нажимал URL-адрес во второй раз.


Если вы имеете в виду самое простое для вас, то вам нужно либо поставить под угрозу безопасность, либо пойти в их офис лично.


Вы не должны использовать JSEncrypt для этого. Было бы трудно интегрировать это здесь. Вы должны либо пойти на forge (предоставляет RSA и все вокруг него), либо sjcl (обеспечивает шифрование ElGamal через KEM, которое должно быть реализовано вместе с AES-GCM; так что это тоже не очень просто).

В США у нас нет удостоверений личности, социальное обеспечение - это лист бумаги без защиты от подделки. Таким образом, SSN * считается * секретным, с его помощью можно выдать себя за другого. Мы немного отсталые в США. zaph 7 лет назад 0
Что ж, это более безопасно, чем просто говорить по телефону, предполагая, что сертификат не скомпрометирован. Базовые станции сотового телефона могут быть построены отдельными лицами и могут передавать вызовы предполагаемым базовым станциям, таким образом, облегчая "прослушивание" людей (которые в настоящее время используют наземные линии связи). Хотя это маловероятно. По крайней мере, в Германии такие поддельные базовые станции обнаруживаются быстро. Artjom B. 7 лет назад 0
0
user4757074

Используйте веб-сайт, например https://www.igolder.com/PGP/generate-key/, для создания открытых и закрытых ключей PGP. Пусть сотрудник отдела кадров отправит вам свой открытый ключ. С помощью их открытого ключа зашифруйте ваш SSN, а затем отправьте его сотруднику отдела кадров, который затем сможет расшифровать его с помощью своего личного ключа.

Похожие вопросы