目次

執筆予定

群論・体論の技術的な応用例をいくつか挙げる。

・RSA暗号

RSA は開発者3人の頭文字(R. Rivest、A. Shamir、L. Adelman)。
大きな数の素因数分解は非常に困難であることを使って
公開鍵暗号の仕掛けを実現。
理屈は以下のような感じ。


群論から得られる1つの結論として、

φ(n)… 0 以上 n 未満で、n と互いに素な数の数。
x∈Z
1 ≡ x^φ(n) mod n

(剰余環 Z/nZ は乗法に関して位数φ(n)の巡回群になる)


n = pq (p, q は非常に大きな素数)とすると、
φ(n) = (p - 1)(q - 1) となる。

de ≡ 1 mod φ(n)
e とφ(n)は互いに素
という2つの条件を満たす整数 d, e を用意すれば、

x∈Z
x^{de} ≡ x mod n

になる。
平文を M 暗号文を C とすると、
C = M^d mod n
M = M^e mod n
で暗号化・復号化可能。

(d, n) を公開鍵に、(e, n)を秘密鍵にする。


ちなみに、「e とφ(n)は互いに素」という条件は
「gcd(e, φ(n) = 1」に置き換えられるので、
ユークリッド互除法で計算可能。
e から「de ≡ 1 mod φ(n)」を満たす d を求めるのも
拡張ユークリッド互除法で計算可能。


非常に大きな数の素因数分解は困難であるため、
n から p, q を計算することは困難。
p, q が分からなければ e, d のどちらか一方から他方を計算することは出来ない。


・AES暗号のSubBytes変換

AES はアメリカの国家新標準暗号規格 (Advanced Encryption Standard) で
規格化された共通鍵暗号方式。
その一部(SubBytes変換)に体論の知識が使われている。


下手な秘密鍵暗号方式の作り方をすると、
平文と暗号文から鍵を特定される恐れがあります。
鍵を特定されないようにするためには、
暗号処理の内部状態を毎回変化させならが(攪拌処理)鍵をかけます。

攪拌処理にはアフィン変換やシフト変換などの線形変換も用いられますが、
線形変換のみによる攪拌処理では、
平文と暗号文から割と簡単に鍵を計算できてしまいます。

そこで、非線形な攪拌処理が必要になるわけですが、
当然、復号化できなくなっては秘密鍵暗号化の意味がないので、
非線形かつ可逆な変換が必要になります。

このような目的にうってつけの演算が「ガロア拡大体の逆元計算」です。
AES では 8bit の数値を GF(2^8) に見立てて、
その逆元を求めるという変換を使用しています。


非線形の可逆変換をしたければ、
適当に選んだ変換テーブルを引く(S-BOX)だけでも構わないのですが、
「正体の良く分からないテーブルを引く」という手段では
「暗号制作者のみが知り得る抜け道が潜んでいるのではないか」
という不安が生じます。

実際、AES の前身である DES はこの疑惑を持たれていました。
DES 暗号は IBM が提案した Lucifer という方式を元に、
米国国家安全保障局(NSA)が修正を加えたものです。
NSA の修正点の1つに S-BOX の変更があり、
NSA が S-BOX に暗号解読用の抜け道を仕込んだのではないか
という疑惑が生じました。
(S-BOX の変更し、その詳細を非公開にしたのは、
当時、民間には知られていなかった「差分暗号解析」という
暗号解読手法に対する強度を高めるため。)


GF(2^8) の逆元計算の仕方には以下のようなものがあります。

- テーブル化
	高速に計算可能だが、テーブルを持つ分、メモリや回路規模が大きくなる。
- GF(2^8) の性質から x^254≡x^{-1} mod 256 なので 254 乗する。
	回路は単純だが、計算量が多くなる。
- GF(2^8) が GF(2^2^2^2) と同型なことを用いて計算量削減。
	少ない演算量で小さい回路規模を実現


・巡回符号


・擬似乱数
メルセンヌツイスターとか。
公式ページの情報によると、2元体 GF(2) 上の19937次元のベクトル空間 V の
自己準同型環 End(V) で固有多項式が既約なものを使うらしい。

更新履歴

ブログ