このインデックスページと一連の関連ページは「JavaScrypt: Browser-Based Cryptography Tools」( http://www.fourmilab.ch/javascrypt/) を 日本語に翻訳したものです (公開:2004年 3月 29日/更新:2007年 3月 24日)。ここにあるページ自体は別サイトなどに存在する複製の可能性がありますが、オリジナルの URL はこの翻訳の最終更新日現在において http://www.hcn.zaq.ne.jp/___/JavaScrypt/ です。

JavaScrypt:ブラウザベースの暗号ツール


JavaScryptへようこそ。JavaScrypt はウェブブラウザだけで動作する安全性の高いデータ暗号化のための道具です。実行には JavaScript に対応しているブラウザが必要であり、かつ、ブラウザの設定で JavaScript の実行を許可していなければなりません。

上のボックスに「あなたのブラウザは JavaScript に対応しています」と書いてあれば利用可能です。

JavaScrypt は 完全にブラウザ内部だけで動作する -- いかなる情報もサーバへは送信されない。気になる場合はあなたのコンピュータにJavaScrypt をダウンロードしてインターネットに接続していない状態で利用することもできる。

JavaScrypt が提供する暗号機能はアメリカ合衆国において Federal Information Processing Standard 197 として採用された Advanced Encryption Standard (AES)を利用している。AES は 128, 192, 256 ビット長の鍵をサポートしており、JavaScrypt はもっぱら 256 ビット長の鍵を利用している。

暗号についてすでによくご存知であれば、JavaScrypt の各種コンポーネントを実装したページへ直接行って先を続けるとよい。もし見慣れないと感じるなら、使い方を実践体験できるJavaScrypt 入門実践へ行くとよい。

(訳者補足)プログラムによる処理に多少の時間を要することがある。特に Firefox ブラウザを利用している場合、動作中に「警告:応答のないスクリプト…」という内容のダイアログが表示されかもしれない。Firefox 1.5 の場合は「処理を続行」と「スクリプトを停止」の二つの選択肢が提示されるが、その場合は「処理を続行」を選択してやるように。処理時間によっては二度以上繰り返す必要がある。Firefox の場合、このダイアログの応答が煩わしければスクリプト実行の制限時間を増やすことで回避できる(ブラウザの URL フィールドに about:config と入力して表示されるページで dom.max_script_run_time の項目を探し出し、そこの値(デフォルト値は1秒)を変える)。

JavaScrypt の各種コンポーネント

何故 JavaScript で暗号化するのか?

一見すると暗号の実装に JavaScript を用いることは間違った選択だと思われがちである。これらのプログラムはどちらかと言えば巨大で込み入っており、Java アプレットやウェブサーバ cgi と比較するとダウンロードして実行するのにはより時間がかかる。私は2つの理由から JavaScript を選択した:安全性透明性だ。

安全性   暗号の目的は唯一つ、秘密の保護にある。これは処理過程において安全性が疑わしいものへの結び付きがあってはならないことを意味する。通信文がサーバで暗号化されるならば、それはインターネットを経由する必要があり、中継地で傍受される可能性がある。例えば SHTTP(secure HTTP)などの様なある種の仕組みを用いれば傍受を完全に防止できるかもしれないが、依然として暗号化処理を行うサーバが便宜のためにデータの複製をあなたの IP アドレスと関連付けてファイルに保存しないことを確認するすべはない。

程度の如何に関わらず安全性のためには、インターネット上のいかなるサイトとも通信や対話をせずに、全ての処理があなたのコンピュータで為されるという事が本質的である。ウェブブラウザと JavaScript の組み合わせはこれを可能にする。ここにある一連のページに埋め込まれたプログラムはあなたのコンピュータでのみ実行され、何もインターネットへ送信しない。出力はテキストボックスにのみ表示され、別のアプリケーションにカット&ペーストできる。以降の安全性はあなたに委ねられる。

安全性は絶対確実ではない。ここのページで暗号化されたデータは以下に挙げられる様な、あるいはそれらに限られず、様々な手段により危険にさらされる:

これらの様なことを心配するあまり気が変になりそうになるかもしれない。最もありがちなリスクを排除するための一つの方法は、ここのページとそれらが参照している JavaScript プログラムをダウンロードして、あなたの制御下にある安全な建物内でネットワークに繋がっていないコンピュータで"file:" URL から実行することである。そしてあなたのブラウザが作り出したファイルを注意深く観察することだ。そこに隠されていたとても興味深い事実を発見できるかもしれない・・・

透明性.   安全性に関連する道具の品質はその設計と実装に依存する。透明性とは、要するにその動作の仕組み全てが見えることであり、信頼に値するものかどうかをあなた自身で判断できることである。プログラムの場合はその完全なソースコードが入手可能であり、提供されたソースが本当にそのプログラムのものであるかどうかを確かめられることを意味する。

JavaScript は元々この透明性を備えている。プログラムはウェブページに埋め込まれており、中身を吟味したければ、ブラウザの「ソースを表示」機能を利用したり、ページをファイルに保存してテキストエディタで見ればよい。ページから参照されている外部 JavaScript も同様にダウンロード可能であり、ソースコードの形で検証する事ができる。 JavaScript はインタープリタ言語なので、見えているものがそのまま実行される。提示されたソースコードが実は実際に動いているプログラムのものではないかもしれない、などといったリスクは存在しない。

あなたがプログラミングや安全性について十分な知識を持っていなくとも、プログラムに欠陥があるかどうかを判断する上で透明性は重要である。事実、透明性があれば十分な専門知識を持った人をも含めた誰もがプログラムを検証できることになり、彼らの判定をあなた自身の判断材料にすることができる。

謝辞

AES (Rijndael) 暗号アルゴリズムの JavaScript による実装は Fritz Schneider 氏により開発された。JavaScrypt では少し変更が加えられている。 JavaScript による AES 暗号を利用する統合ユーティリティを開発したいのであればオリジナル版から始めると良い。

MD5 message-digest アルゴリズム の JavaScript による実装は Henri Torgemane 氏により開発された。著作権と利用許諾条項を含めて吟味される場合はソースコードファイル md5.js をご覧になるように。MD5 アルゴリズム自体は Ron Rivest 氏により開発されたものである。


訳注


Valid XHTML 1.0
by John Walker
December, 2005 翻訳:広瀬行夫 2004年 3月
( Translated by HIROSE, Yukio; March, 2004 )
last updated: 2007/03/24
この文書はパブリックドメインです(二次的著作物としてのこの翻訳の著作権)。