- angel_p_57
- 10086
- 15
- 3
- 0
では python インタプリタを電卓代わりに使って計算していく。ちなみにバージョンは 3.9。古い Python だと、ここからやってることが一部再現できないので試したい人は注意。( 3.8 あれば十分かな )
2022-09-11 23:20:28素数を p1,p2 として、で、決め打ちの 65537 は e として代入しておいて、pow(e,-1,(p1-1)*(p2-1)) で復号に使う d を計算しておく。 pic.twitter.com/az5hfXGgvl
2022-09-11 23:21:30このとき d=6487172898738673608142962566651142176724436629171562667080650867240611344282895654505717086692249249965266349644325964031127748005777531631590921811458473 …これ、実際は効率悪いし直接は使わないんだけど。まあ、簡易デモなので。
2022-09-11 23:22:09で、cipher にさっきの暗号文に相当する数値を代入しておき、pow(cipher,d,p1*p2) で復号計算を行う。結果は 441751578210090834695978992868015224671943576942424094596129956257243727562379541505029980921219321215981473033880198158801213890044430170194615037706 pic.twitter.com/66fSS0T2Bk
2022-09-11 23:22:50くどいようだけど、あくまで簡易デモだからこういう計算してるけど、実際にはこうは計算しない。 で、得られた数値は元のメッセージを含んだデータなんだけど、これも16進数にしてからメッセージを抜き出す。
2022-09-11 23:23:2164バイト ( 16進128桁 ) のデータとして16進数表記にすると、先頭は "0002" 固定で、2桁単位で見ていって "00" までが暗号化時に使ったランダムデータ、それ以降が元のメッセージデータになっている。 pic.twitter.com/mCXAaA0J7b
2022-09-11 23:24:45なので、"00" に続く 4e 以降を16進ダンプデータと見て逆変換すれば。果たして、最初に用意したメッセージがちゃんと得られる、と。 ※ 末尾の \n は改行文字が入っていることを表す pic.twitter.com/LM0aWKRB6Y
2022-09-11 23:25:49ちなみに16進ダンプからの逆変換は、python 使わなくても Linux 付属の xxd なんかでも可能。 pic.twitter.com/dCVACGEJxq
2022-09-11 23:26:47まあなので、簡易的なデモなら e,d の話しなくてもあんまり困らないし。実際のRSAの処理を詳しく言うなら、e はともかく d は使わないし。番組で「いきなり17が出た」的なやり方でも困らないんじゃないの、という感想。
2022-09-11 23:27:30身も蓋もないことを言うと、どうせ番組見て分かるのってさわりの部分でしかないし、「技術的な知見」という意味だと、ほとんど無意味だし。紹介程度の話なら十分だろう、的な。
2022-09-11 23:29:30それに e,d の話しようとすると「素因数分解が困難な性質を利用」の話が一段階ややこしくなるしね。 ※上のデモでは計算途中で素因数分解の結果の素数をちゃんと使ってるので、無いと復号計算できないのが一目瞭然
2022-09-11 23:30:14