Rynのページ(商業高校情報教育研究室)
まだまだ作成途中です。
めも
平文(ひらぶん)を暗号化すると、暗号文。
暗号文を復号すると、平文。
「復号」は動作をあらわすので、本来、復号化という言葉は間違い。
無理矢理「化」に拘れば「平化」なのかもしれないが、そうは言わない。
共通鍵暗号方式
暗号化と復号に同じ鍵を使用する暗号方式。
秘密鍵暗号方式、対称鍵暗号方式、共有鍵暗号方式、など色々な言い方をするのでややこしいが、みな同じ。
処理が速いが、データをやり取りする相手の人数分だけ別の鍵が必要になるので管理が面倒くさく、
鍵自体の相手への受け渡しも問題になる。
基本的な方法としては、
- 平文を一文字単位で、ABC順、五十音順、イロハ順、などに従って一定の数だけ前後にずらす
(いわゆる「シーザー暗号」)\li>
- 平文を一定の文字数でブロックに区切り、
各ブロックの何文字目かによって
ABC順、五十音順、イロハ順、などに従って前後にずらす数を変化させる
- 平文を一定の文字数でブロックに区切り、
各ブロック内で一定の規則に従って文字を入れ替える
- 行数×列数=平文の文字数、になる様な表(マス目)を作成し、
平文をマス目の右上から縦書きで埋めて行き、
それを左上から右へ横書きで読んで行く様にして暗号化する
- 平文を一定のビット数でブロックに区切り、
各ブロック内でビットをずらしたり、入れ替えたり、XOR演算をしたりする
など多くの方法が有り、単独ではなく組み合わせても使われる。
DES
共通鍵暗号方式のアルゴリズムの一つ。
データを64ビットずつに区切り、各ブロックごとに、
さらに半分に分けた32ビットのサブブロックの入れ替えやXOR演算を繰り返すことで暗号化する。
既に「安全ではない暗号」とされている。
AES
共通鍵暗号方式の一つ。
アメリカ商務省技術標準局がDESに代わって採用した。
公開鍵暗号方式
暗号化に公開鍵、復号に秘密鍵という異なる鍵を使用する暗号方式。
暗号化する鍵が公開されている為、共通鍵暗号方式に見られる様な問題が起きず、
復号する鍵を本人だけが持つことで盗聴を防ぐ。
有名なものにRSAが有るが、RSAだけが公開鍵暗号方式では無いので、
混同してはいけない。
RSA
有名な公開鍵暗号方式のアルゴリズムの一つ。
RSAは、開発した3人の技術者の頭文字。
「2つの素数p、qの積Nを法(N-1までしか数が存在せず1を加えると0に戻る)とする世界では、
或る数を、
n×(p-1とq-1の最小公倍数)+1)乗した値は、元の数と等しくなる(nは任意の整数)」
ことを利用している。
具体的には、
- 2つの素数pとqを決める。
- pとqを掛けて法Nを求める。
- (p-1)と(q-1)の最小公倍数Lを求める。
Lは、元の数に戻る、べき乗数の周期。
L+1は、1乗を除き、最初に元の数に戻る時のべき乗数。
- e×dを(p-1)×(q-1)で割った余りが1となり、
3以上でLより小さく、Lとの最大公約数が1(=互いに素)である、
整数eと整数dを決める。
- Nとeが公開鍵、Nとdが秘密鍵になる。
- 暗号化は、公開鍵を使って、暗号文=平文e mod N
復号は、秘密鍵を使って、平文=暗号文d mod N
RynもEXCELでやってみた。
2つの素数p=3、q=11とすると、法Nは33。
(p-1)の2と(q-1)の10との最小公倍数Lは10。
(e×d)mod((p-1)×(q-1))=1で、3以上L未満、Lと互いに素である、eとdを求める。
e=7、d=3、とすると、
(7×3)mod(2×10)=1となる。
例1(図の赤丸)
平文3を暗号化する場合は、公開鍵(N=33,e=7)を使って、3
7 mod 33=9
暗号文9を復号する場合は、秘密鍵(N=33,d=3)を使って、9
3 mod 33=3
例2(図の緑丸)
平文8を暗号化する場合は、公開鍵を使って、8
7 mod 33=2
暗号文2を復号する場合は、秘密鍵を使って、2
3 mod 33=8
小さい数では余り面白くないが、
非常に大きな数においては、素数×素数の計算は簡単だが、
因数分解した2つの数値が素数かどうかを調べるのは無茶苦茶時間がかかる事から、
経験則としてセキュリティが高いとされている。
しかし、アルゴリズムが複雑で処理に時間がかかるので、
通常は平文全体をRSA方式で暗号化する事はせず、
送信者は、平文を共通鍵暗号方式の一時的に作成した秘密鍵(セション鍵)で暗号化し、
その秘密鍵をRSA方式の受信者の公開鍵で暗号化して、
暗号文と暗号化されたセション鍵の2つを送信する事が多い。
受信者は、RSA方式の自分だけの秘密鍵でセション鍵を復号した後、
そのセション鍵を使って暗号文を復号する。
物凄く乱暴な一例
実際はもっと複雑な処理をしています。勿論。
- 平文
「6時に駅」→「ロクジニエキ」
- セション鍵
例として、五十音順にずらす文字数を鍵にする。暗号化は前へ、復号は後へずらす。今回は3とする。
- 公開鍵と秘密鍵
上記のもの。
送信者の暗号化手順
- 平文をセション鍵3で暗号化する。
「ロクジニエキ」→「リオゲテアエ」
- セション鍵3を受信者の公開鍵(33と7)で暗号化する
37 mod 33=9
- 暗号文「リオゲテアエ」と暗号化されたセション鍵9を相手に送付する
受信者の復号手順
- セション鍵9を受信者の秘密鍵(33と3)で復号する
93 mod 33=3
- 復号されたセション鍵3を使って、暗号文を復号する。
「リオゲテアエ」→「ロクジニエキ」
電子署名
サイン、ハンコ、指紋など、個人の認証に使うデータを電子化したもの。
デジタル署名の事を指す事も有るのでややこしい。
デジタル署名
データの送信者とその内容を証明する手法。
デジタル署名にはRSAを利用したもの以外にも様々な方法が有るが、一々書いてられないので、
以下、RSAを利用したものについて書く。
全てのデジタル署名がこの方法で行われている訳ではないので念のため。
RSAの項のべき乗の表で判る様に、RSAのアルゴリズムでは、
一方の鍵で暗号化したものはもう一方の鍵で復号する事が出来る性質を持っている
(しつこいが「公開鍵暗号方式」がそうである訳ではない)。
デジタル署名でRSA方式を利用する場合には、送信者の身元を証明する為に、
暗号化に送信者だけが持つ秘密鍵、復号に誰もが使う事が出来る送信者の公開鍵を使用する。
データ本体の暗号化については含めずに書くと、具体的には、
- 送りたいデータを一方向ハッシュ関数
(或るアルゴリズムにより、他と一致し難く、
元に戻せない形で小さくグチャグチャにする)でハッシュ値を求める。
- ハッシュ値を送信者のRSA方式の秘密鍵で暗号化する。
- データとハッシュ値を相手に送信する。
- 受信者は、送信者のRSA方式の公開鍵でハッシュ値を復号する。
復号出来れば、送信者が証明出来た事になる。
- 送られて来たデータを一方向ハッシュ関数でハッシュ値を求める。
2つのハッシュ値が一致すれば、データが改ざんされていないことになる。
「キーワード辞典」の目次へ