Was ist der einfachste Weg, die Verschlüsselung mit öffentlichen Schlüsseln durchzuführen?
Am einfachsten für wen? Ich denke, Sie meinen für die Person aus der Personalabteilung. Das einfachste Protokoll, das ich sehe, kann implementiert werden, so dass sie nur zweimal auf die Website zugreifen müssen, ohne dass sie zusätzliche Maßnahmen ergreifen müssen.
Sie müssen auf Ihrem Personal Server eine nicht statische Site erstellen, auf der Sie ziemlich sicher sind, dass der Serveranbieter nicht auf der Festplatte des Servers sucht.
Sehen wir uns die Schritte an (Implementierungsdetails sind mit dem Protokoll verwoben):
Generieren Sie zwei kryptische URLs auf Ihrem Server und senden Sie die erste URL an die Person des Personals (ab jetzt Empfänger). Sie bitten den Empfänger, Sie anzurufen, sobald er auf die URL geklickt hat.
Der Empfänger klickt auf die URL und einige Dinge passieren:
Der Server prüft, ob diese URL zuvor angefordert wurde, und zeigt gegebenenfalls einen Fehler an. In diesem Fall muss dieser Vorgang erneut gestartet werden.
Wenn dies der erste Aufruf der URL ist, generiert JavaScript ein Schlüsselpaar (public + private).
Der öffentliche Schlüssel wird an den Server gesendet und dort gespeichert, und der private Schlüssel wird im localStorage im Empfängerbrowser gespeichert.
Darüber hinaus generiert der Empfängerbrowser eine zufällige Zeichenfolge (als Token bezeichnet), speichert sie in localStorage und sendet sie an den Server, auf dem sie gespeichert ist.
Nun ruft der Empfänger Sie an. Sie fragen dann, ob ein Fehler aufgetreten ist. Wenn es keine gab, müssen Sie die zweite kryptische URL öffnen, die Sie in Schritt 1 generiert haben. Diese kryptische URL ist mit den Informationen verknüpft, die Sie in Schritt 2 vom Empfänger erhalten haben, und enthält ein Formular, in das Sie Ihren SSN eingeben können.
Das SSN wird mit dem gespeicherten öffentlichen Schlüssel verschlüsselt, und der Chiffretext wird unter einer dritten kryptischen URL veröffentlicht, die auf dem Token von Schritt 2 basiert.
Sie bitten den Empfänger, erneut auf den Link zu klicken, und er erhält eine Fehlerseite. Diese Fehlerseite wird jedoch schnell ausgeblendet, da der localStorage zusätzliche Werte enthält, was bedeutet, dass es sich um eine legitime Anforderung handelt. Der Browser des Empfängers führt Folgendes aus:
Es holt das Token von localStorage und fragt den Chiffretext ab.
Es holt den privaten Schlüssel von localStorage und entschlüsselt den Chiffretext.
Es zeigt die SSN an.
Dieses Protokoll behebt das Problem, dass das SSN niemals im Klartext auf dem Server gespeichert wird. Wenn jemand vor oder nach dem beabsichtigten Empfänger auf den Link geklickt hätte, würden sie nichts sehen. Dies kann jedoch immer noch anfällig für das Abfangen von SSL durch einen böswilligen Hoster sein, und es gibt Einstiegspunkte für das Social Engineering.
Sie können dies ein wenig verbessern, indem Sie lange Abfragen oder Web-Sockets verwenden, wenn der Empfänger nicht ein zweites Mal auf die URL klicken soll.
Wenn Sie das für Sie am einfachsten meinen, müssen Sie entweder die Sicherheit beeinträchtigen oder persönlich in ihre Büros gehen.
Sie sollten JSEncrypt dafür nicht verwenden. Es wäre schwer, es hier zu integrieren. Sie sollten entweder Schmiede (bietet RSA und alles um ihn herum) oder sjcl ( ElGamal- Verschlüsselung über KEM, das zusammen mit AES-GCM implementiert werden muss; daher auch nicht wirklich einfach).