2006年6月15日 (木)

暗号化を簡単に理解する

セキュリティ対策

最近の世の中、情報漏洩対策やWinny問題などの影響もあってか、こと、コンピュータの扱い、特にデータに関してはものすご~く敏感になっています。

  • ノートパソコンはワイヤーで机にくくりつける。
  • ディスクトップだって、ワイヤー付き。
  • 机の引き出しも3段、すべて鍵がかかるものに。帰宅時は必ずロック。
  • Windowsにログインするユーザのパスワードを設定する。
  • BIOS起動時のパスワードを設定する。
  • USBメモリ内のデータは暗号化する。
  • ハードディスクを丸ごと暗号化する。
  • Wordの文書も暗号化してパスワード付きで保存する。

セキュリティシステム作動中

会社の入っているビルのフロアーは、フロア毎にセキュリティシステムを作動させて施錠します。IDカードがなければトイレに行くこともできません。夜は、一晩中、警備員の方が監視カメラをモニターしています。それでも、コンピュータのデータを幾重にも暗号化します。パスワードをかけて万全の体制をとっています。

それでも情報漏洩が後を立ちません。いったい、いつまでこの状態が続くんでしょう。トイレの鍵をかけるように、データを暗号化したりパスワードで保護することはエチケットだとしても、そばで仕事をしている同僚でさえ疑ってかかるような状態は尋常ではないと思います。いったい、どんな「敵」に対してセキュリティ対策を行っているのか、自分でもわからなくなってしまいます。

でも、決められたルールは守らねばなりません。自己防衛のためには仕方ないのかもしれません。

2進数で暗号化

ところで、セキュリティ対策などでデータを暗号化することは日常茶飯事のことでしょうが、コンピュータではどのようにしてデータを暗号化しているかご存知でしょうか。暗号化の方式はたくさんあって、どんどん進化しているようですが、もっとも基本的な暗号化について簡単に説明します。と、いっても、どこをどう叩いたって、これ以上の方式なんて私は知りません。。。

それでも基本的な考え方でも理解しておけば、もっと難しい方式を勉強するときには役にたつと思います。キーワードは2進数。2進数の理屈を理解していればなんてことはありません。

排他的論理和

2進数の基本的な演算の一つに、「排他的論理和(XOR)」という演算があります。論理和(OR)、論理積(AND)などと並んで新人教育で勉強している方も多いと思います。2進数の計算で、2つの入力のうち、いずれか一方が1の場合に結果(出力)が1になり、どちらも1または0の場合は出力は0となります。2つの値が異なる場合に1(真)となる演算がどこでどう必要なんだかはよくわかりません。昔、回路設計をやった記憶がはるか遠くにあるんですが、どんな効用があったのかすら思い出せません。年かな。。。

あら不思議

ここでちょっと例題です。結果をよーく、覚えておいてください。

          0100 0001    (0x41)
          0001 0110    (0x16)
          ---------------------
          0101 0111    (0x57)

では、この0x57にもう一度、0x16との排他的論理和を計算すると。。。

          0101 0111    (0x57)
          0001 0110    (0x16)
          ---------------------
          0100 0001    (0x41)

どうです?元の 0x41 になりましたか?もう一度、自分で「排他的論理和」を指さし確認しながら数字をなぞってみてください。なんなら、ノートに適当な数字を書いて、「排他的論理和」で遊んでみてはどうでしょう。

わかってしまえばなんてことはない

0x41(元のデータ) を 0x16との排他的論理和を計算し、0x57(暗号化したデータ)を出力する。その結果の0x57にまたまた0x16との排他的論理和を計算すると、元の0x41に戻ってしまう。

そうです。この0x16が暗号化のキーになっているんです。暗号化する側と元の値に複合する側が、同じ0x16という値をつかって、同じ計算をすることで、暗号化、複合化ができてしまうんです。簡単でしょ?

暗号って聞くと数学が苦手だった私には理解できない部分も多いんですが、こんな単純な方法なら自分でも簡単にプログラミングできちゃいそうですね。

2進数っていうか、電子回路ってほんとうに面白いもんです。

| | コメント (212) | トラックバック (95)