「笑わない数学」RSA暗号回の問題点

「笑わない数学」でRSA暗号が取り上げられて、幾つか数学的な指摘が上がりつつも概ね好評だったようだけど。実は大きな問題点がありましたね、という話。
44
angel (as ㌵㌤の猫) @angel_p_57

では python インタプリタを電卓代わりに使って計算していく。ちなみにバージョンは 3.9。古い Python だと、ここからやってることが一部再現できないので試したい人は注意。( 3.8 あれば十分かな )

2022-09-11 23:20:28
angel (as ㌵㌤の猫) @angel_p_57

素数を p1,p2 として、で、決め打ちの 65537 は e として代入しておいて、pow(e,-1,(p1-1)*(p2-1)) で復号に使う d を計算しておく。 pic.twitter.com/az5hfXGgvl

2022-09-11 23:21:30
拡大
angel (as ㌵㌤の猫) @angel_p_57

このとき d=6487172898738673608142962566651142176724436629171562667080650867240611344282895654505717086692249249965266349644325964031127748005777531631590921811458473 …これ、実際は効率悪いし直接は使わないんだけど。まあ、簡易デモなので。

2022-09-11 23:22:09
angel (as ㌵㌤の猫) @angel_p_57

で、cipher にさっきの暗号文に相当する数値を代入しておき、pow(cipher,d,p1*p2) で復号計算を行う。結果は 441751578210090834695978992868015224671943576942424094596129956257243727562379541505029980921219321215981473033880198158801213890044430170194615037706 pic.twitter.com/66fSS0T2Bk

2022-09-11 23:22:50
拡大
angel (as ㌵㌤の猫) @angel_p_57

くどいようだけど、あくまで簡易デモだからこういう計算してるけど、実際にはこうは計算しない。 で、得られた数値は元のメッセージを含んだデータなんだけど、これも16進数にしてからメッセージを抜き出す。

2022-09-11 23:23:21
angel (as ㌵㌤の猫) @angel_p_57

64バイト ( 16進128桁 ) のデータとして16進数表記にすると、先頭は "0002" 固定で、2桁単位で見ていって "00" までが暗号化時に使ったランダムデータ、それ以降が元のメッセージデータになっている。 pic.twitter.com/mCXAaA0J7b

2022-09-11 23:24:45
拡大
angel (as ㌵㌤の猫) @angel_p_57

なので、"00" に続く 4e 以降を16進ダンプデータと見て逆変換すれば。果たして、最初に用意したメッセージがちゃんと得られる、と。 ※ 末尾の \n は改行文字が入っていることを表す pic.twitter.com/LM0aWKRB6Y

2022-09-11 23:25:49
拡大
angel (as ㌵㌤の猫) @angel_p_57

ちなみに16進ダンプからの逆変換は、python 使わなくても Linux 付属の xxd なんかでも可能。 pic.twitter.com/dCVACGEJxq

2022-09-11 23:26:47
拡大
angel (as ㌵㌤の猫) @angel_p_57

まあなので、簡易的なデモなら e,d の話しなくてもあんまり困らないし。実際のRSAの処理を詳しく言うなら、e はともかく d は使わないし。番組で「いきなり17が出た」的なやり方でも困らないんじゃないの、という感想。

2022-09-11 23:27:30
angel (as ㌵㌤の猫) @angel_p_57

身も蓋もないことを言うと、どうせ番組見て分かるのってさわりの部分でしかないし、「技術的な知見」という意味だと、ほとんど無意味だし。紹介程度の話なら十分だろう、的な。

2022-09-11 23:29:30
angel (as ㌵㌤の猫) @angel_p_57

それに e,d の話しようとすると「素因数分解が困難な性質を利用」の話が一段階ややこしくなるしね。 ※上のデモでは計算途中で素因数分解の結果の素数をちゃんと使ってるので、無いと復号計算できないのが一目瞭然

2022-09-11 23:30:14