OpenPGP.js - JavaScriptで使えるOpenPGP
今、セキュアに情報を管理しようと思うと採用したいのが秘密鍵/公開鍵ではないでしょうか。ビット数によりますが、十分に長ければおいそれと解除されることはないでしょう。問題は一般ユーザに普及していないことです。 もしWebサービスで導入したかったらOpenPGP.jsを使ってみてはいかがでしょう。JavaScript上でOpenPGPが使えます。
OpenPGP.jsの使い方
面白いのは鍵の生成がWebブラウザ上でできることです。これによりサーバ側でも知り得ない情報の管理が可能になります。
var options = {
userIds: [{ name:'Jon Smith', email:'jon@example.com' }], // multiple user IDs
numBits: 4096, // RSA key size
passphrase: 'super long and hard to guess secret' // protects the private key
};
openpgp.generateKey(options).then(function(key) {
var privkey = key.privateKeyArmored; // '-----BEGIN PGP PRIVATE KEY BLOCK ... '
var pubkey = key.publicKeyArmored; // '-----BEGIN PGP PUBLIC KEY BLOCK ... '
});
後は公開鍵だけでサーバ側に保存しておけば良いでしょう。秘密鍵はlocalStorageであったり、ダウンロードして保存しておいても良いかと思います。
後はデータの暗号化、復号化が可能です。
var options, encrypted;
var pubkey = '-----BEGIN PGP PUBLIC KEY BLOCK ... END PGP PUBLIC KEY BLOCK-----';
var privkey = '-----BEGIN PGP PRIVATE KEY BLOCK ... END PGP PRIVATE KEY BLOCK-----';
options = {
data: 'Hello, World!', // input as String (or Uint8Array)
publicKeys: openpgp.key.readArmored(pubkey).keys, // for encryption
privateKeys: openpgp.key.readArmored(privkey).keys // for signing (optional)
};
openpgp.encrypt(options).then(function(ciphertext) {
encrypted = ciphertext.data; // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
});
なお、JavaScriptで計算処理を行っているので若干速度が遅いのが難点です。通常のJavaScriptの他、Web Workerによるバックグラウンド処理もサポートしています。Webブラウザはもちろん、nodeを使ってサーバサイドで使うこともできます。
OpenPGP.jsはJavaScript製のオープンソース・ソフトウェア(LGPL)です。
OpenPGP.js | OpenPGP JavaScript Implementation openpgpjs/openpgpjs: OpenPGP implementation for JavaScript