torutkのブログ

ソフトウェア・エンジニアのブログ

Java読書会「Javaで作って学ぶ暗号技術」を読む会(第1回)を終えて #javareading

今月から、新しい図書Javaで作って学ぶ暗号技術 - RSA,AES,SHAの基礎からSSLまでの読書会が開始です。本日は第1回を開催しました。

本日は、通算222回目、34冊目となります。参加人数は11名、申込人数は9名なので参加率は122%!
平均参加人数は11.8人なのでほぼ平均的な参加人数です。
読んだページ数は、まえがき含めて61ページです。これまでの平均ページ数は58.9ページですので、これまた平均的な進み具合です。

本日の話題のメモ

SHA-256, SHA-384, SHA-512は、まとめてSHA-2と呼びます。また、本には記載がありませんが、SHA-3というのもあります。昨日リリースされたJava SE 9からSHA-3が含まれます。

マン・イン・ザ・ミドル攻撃の技術は、会社のファイアウォールで社内外のhttpsアクセスを監視するために導入されています。

SSLプロトコルはもう古くてTLSプロトコルTLS 1.2)が使われています。しかし、TLSを含めた広義の意味でSSLという言葉が使われています。今でもSSL証明書といった言い方が主流です。

真性乱数では、UNIXの/dev/randomがあります。これは、エントロピーが不足するとブロックされてしまいます。一方、ブロックされない /dev/urandom もありますが、擬似乱数でもあります。

最近のIntelプロセッサは真性乱数の回路を持っています(Ivy Bridge以降)。CPU命令のRDRANDです。
Java SE 9 のSecureRandomクラスではCPUの乱数生成を使用できるようになりました。(JEP 273 DRBG-Based SecureRandom Implementation)

本のサンプルコードはダウンロードできますが、コンパイルエラーが置きているようです。

本では最大公約数を計算する方法として、試行割り算法、ユークリッド互除法、バイナリー・ユークリッド互除法の3つをコード例とともに紹介し、速度を測っています。また、JavaのBigIntegerのgcdメソッドの速度も計測しており、一番高速なのがBigIntegerのgcdメソッドとあります。
そこで、BigIntegerのgcdメソッドのソースを参照してみました。すると、2つの値の桁数に応じてユークリッド互除法とバイナリ・ユークリッド互除法を使い分けて高速化を図っていました。

ユークリッドは古代(紀元前4〜3世紀)の数学者で、プトレマイオス1世の時代のアレキサンドリアにいた人です。プトレマイオス1世は、アレキサンダー大王とその没後のディアドコイ戦争の主要人物の一人です。

量子コンピューターでRSAが破られるのでしょうか?

System.currentTimeMillis() と、System.nanoTime()の違いについて