ITサポート

セミナー

会員特典

その他

過去のコラム等

Twitter

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■第12回 排他的論理和で暗号化 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  ところで皆さんは暗号を作ったことがあるでしょうか。  10年ほど前に関わったプロジェクトでの話なんですが、ログインパスワード  をそのまま保存するのは危険ということで、暗号化しようということになり  ました。  ある会社の人が自分がやりますと言うので任せたのですが、このような暗号  が出来てきました。  APZBAYCSXDSWEWVFOUGRTHDS  「これって、「PASSWORD」って書いてありますよね?」  と私が言うと驚いた顔をされたのですが、実に単純な方法です。  暗号化したい文字を、「ABCDEFG.....」と「ZYXWVUTS.....」のアルファベ  ットで囲んでいるだけなんです。  3文字ずつ区切って、真ん中の文字だけ読めばすぐ解読できてしまいます。  このように、人間に馴染みの深い記号や文字を規則的に並べたり入れ替えた  りする暗号は、強度があまり高くありません。  暗号化するなら、「なんだこりゃ?」なものになっているべきでしょう。 ●XOR演算(排他的論理和)  本題に入る前に、前回紹介した排他的論理和を思い出してみましょう。  XORとは、「eXclusive OR」の略で、演算対象の2つがお互いに異なるときに  真となります。  逆にお互いに同じ場合は、0・1に関係なく0(偽)となります。  真理値表は、以下のようになりました。  -------------------  | A | B | A XOR B |  |---|---|---------|  | 0 | 0 | 0 |  |---|---|---------|  | 0 | 1 | 1 |  |---|---|---------|  | 1 | 0 | 1 |  |---|---|---------|  | 1 | 1 | 0 |  -------------------  と、前回の説明はここまでだったのですが、実は排他的論理和にはもう一つ  凄い特徴があります。  それは、「2回演算すると元に戻る」ということです。  実際に演算してみましょう。  「10101010」と「00001111」の排他的論理和です。   10101010  XOR 00001111  -------------   10100101  ここで得られた「10100101」に再び「00001111」をXORしてみます。   10100101  XOR 00001111  -------------   10101010  と、このように元に戻りました。  面白いですね。 ●XORで暗号化  XORの特徴を利用して、暗号化を考えてみましょう。  XORは2進数の演算ですので、まずは暗号化したい文字を2進数のコードに置  き換える必要があります。  コード体系は何でも構いません。  次に、暗号キーを決めます。  上記の例では、「00001111」が暗号キーに該当します。  この2つの2進数をXORすれば、すぐに解読できない2進数が出来上がります。  そのまま2進数でもいいですし、16進数で表記しても構いません。  解読するためには、暗号キーが何かを求めないといけないため、それなりに  時間を要することになりますが、暗号キーを利用者が決める場合、生年月日  などを使用されると推測されやすくなります。  そこで、もっと強度を上げるために、入力された文字をシード値として乱数  を生成し、暗号キーとして用いるなどの工夫をすると、こんな単純なアルゴ  リズムでも容易に解読ができなくなるのです。  ※シード値とは、乱数生成の際に設定するキーのことです。   同じシード値から発生した乱数は必ず同じになるため、上記の例では復号   時でも同じ暗号キーが生成されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━