ITエンジニア/デザイナ向けにオープンソースを毎日紹介

今、セキュアに情報を管理しようと思うと採用したいのが秘密鍵/公開鍵ではないでしょうか。ビット数によりますが、十分に長ければおいそれと解除されることはないでしょう。問題は一般ユーザに普及していないことです。

もし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

 

MOONGIFTの関連記事

コメント

  • DevRel
  • Com2