シーザー(Caesar)パスワードとマッピング(Affine)パスワード

1675 ワード

シーザーのパスワード
その名の通り、これはカエサルが創造した暗号化方法(最も早く知られている)であり、後方移動/前方移動のビット数を表すパラメータkが必要である.
暗号化方式:原文の各アルファベットをkビット後ろに移動し、それを超えるとヘッダに戻ります.数学的に表現するためにアルファベットを数字に符号化しておく 0~25 26 A-Z.このようにしてアルファベットごとにαマッピングされたf(α ) = ( n u m ( α ) + k ) m o d 26 f(α) = (num(α) + k) mod 26 f(α)=(num(α)+k)mod26,num(α)そのデジタル符号化を表し、kはポストシフト数を表し、mod 26はZを超えて先頭に戻る効果がある.このとき、この像f(α ) f(α) f(α) αの密文です.アルファベットシーケンスに遭遇した場合は、1つずつ暗号化すればよい.
復号方式:後方シフトの逆過程は前方シフトであり、前方シフトkビットは復号である.すなわちr(α ) = ( n u m ( α ) − k ) m o d 26 r(α) = (num(α) - k) mod 26 r(α)=(num(α)−k)mod 26,αここでは暗号文字,r(α ) r(α) r(α)原文です.なお、ここでの型取りは、0~25の間の数に切り替える必要がある.一部のプログラミング言語の型取りは、除数された(例えばC++)、すなわち−1%5=−1−1%5=−1−1−1%5=−1−1%5=−1であるが、負の数には対応するアルファベットがないため、n u m(α ) − k < 0 num(α)-k<0 num(α)−k<0の場合、原語対応の数字を得るには、型取り結果+26が必要となる.
認識方法について:既知の原文の一部と完全な暗号文の場合、対応するアルファベットがkビット間違っているかどうかを確認できます.未知の原文ですが、暗号文が長い場合は、アルファベットの周波数を統計することが考えられます.英語で最もよく使われる5文字とその大体の相対周波数:
E
T
A
O
I
13%
9%
8%
8%
7%
密文を統計し、密文に最も多く出現したアルファベットと上表をこの試みに従って対応させます.
パスワードのマッピング
実はシーザーパスワードのアップグレードで、単純な後方シフトルールに乗数を加え、復号化の難しさが増しています.2つのパラメータが必要です:b,kはそれぞれ乗数と後方シフトビット数を表します
暗号化方式:f(α ) = ( b ∗ n u m ( α ) + k ) m o d 26 f(α) = (b*num(α) + k) mod 26 f(α)=(b∗num(α)+k)mod26,α原文アルファベットです.
復号方式:模下演算により得る:r(α ) = b − 1 ( n u m ( α ) − k ) m o d 26 r(α) = b^{-1}(num(α) - k) mod 26 r(α)=b−1(num(α)−k)mod 26であり、b−1 b^{−1}b−1はmod 26の意味におけるbの逆元を表す.
判断方式:シーザー暗号のペアリング方式が失敗した場合、試してみることができるが、パラメータは容易に求めることができず、既知の一部の原文の場合、暴力的にbとkを見つけ出すことができる.
マッピングテーブルについては、A~Z対応0-25に限定されるものではなく、A-Z-a-z対応0-25-26-51といったものであってもよく、後者は識別しにくく、安全性も高い.