| ホーム > 『暗号技術入門 ―― 秘密の国のアリス』 | 検索 | 更新情報 |
| なか見!検索 | 読者の声 | アマゾンで購入 |
|
本書は、複雑に絡み合う暗号技術を、たくさんの図と やさしい文章で ていねいに解説した入門書です。
本書では、対称暗号、公開鍵暗号、デジタル署名、一方向ハッシュ関数、メッセージ認証コード、擬似乱数生成器、PKI、PGP、SSL/TLSといった
現代の暗号技術を解きほぐしていきます。
概略目次および
前書きと詳細目次(PDF)も公開しています。
読者の声もお読みください。
こんにちは、結城浩です。 ここは、私の本 『暗号技術入門 ―― 秘密の国のアリス』 のホームページです。
暗号技術は、現代のコンピュータ社会を生きる私たちにとって重要な技術です。
暗号技術を用いると、 メールやクレジットカード番号が盗聴されるのを防ぐことができます(暗号)。 また、メールの差出人は本当に本人なのか、 クレジットカード番号を送信しているサイトが本物かどうかを確かめることができます(認証)。 暗号技術は、インターネット時代のセキュリティを根底で支えている技術なのです。
しかし、暗号技術は複雑でわかりにくいものです。 対称暗号・公開鍵暗号・デジタル署名・一方向ハッシュ関数・メッセージ認証コード・擬似乱数生成器など、 多くの技術がややこしく絡み合っています。
本書では、ひとつひとつの暗号技術をきちんと解説すると共に、 それらの関係をていねいに解きほぐしていきます。 たくさんの図を使い、 数式をほとんど使わず、数学が苦手な人にもわかりやすいように工夫を凝らしました。 楽しいクイズもありますよ。
暗号技術には、知恵比べやパズルの謎解きのような面白さがあります。 ぜひ、本書を通して暗号技術を楽しみつつ学んでください。
『暗号技術入門 ―― 秘密の国のアリス』 結城浩 著 ソフトバンクパブリッシング刊 416ページ ISBN 4-7973-2297-7 本体価格 \3,000
本書の「前書き」と「詳細目次」をPDFで公開します。 ご購入の参考になさってください。
2004-01-31 : p.207 : 15行目
誤:(ヘッダとフッタの存在や、確率的な偏り (英語の文章らしいなど)
正:(ヘッダとフッタの存在や、確率的な偏り (英語の文章らしいなど))
2004-01-03 : p.40 : 12行目
誤:次に、送信者はメッセージを復号化します。
正:次に、受信者はメッセージを復号化します。
2003-10-16 : p.299 : 20行目先頭
誤:予測可能性
正:予測不可能性
2003-09-26 : p.35 : Fig.2-6
誤:ローター1の1打鍵ごと
正:ローター1の1回転ごと
2003-09-26 : p.35 : Fig.2-6
誤:ローター2の1打鍵ごと
正:ローター2の1回転ごと
詳しくは、RSA社のWebページを参照してください。
Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yuらによって、 メッセージダイジェストMD5に衝突(コリジョン)が発見されました。 これは、CRYPTO 2004カンファレンスにおいて発表されたものです。
試してみたい方のために、以下にPerlスクリプトを用意しました。 以下のスクリプトを動かすと、a.dat, b.datという2つのファイルを作ります。 この2つのファイルは違うものなのに、MD5ハッシュ値が同じになります。
#
# This script is based on the article
# "Collisions for Hash Functions
# MD4, MD5, HAVAL-128 and RIPEMD
# by Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu".
# http://eprint.iacr.org/2004/199.pdf
#
# ...and these web pages.
# http://www.rtfm.com/movabletype/archives/2004_08.html#001055
# http://slashdot.jp/comments.pl?sid=203703&cid=607766
#
# This script is written by Hiroshi Yuki. (Thanks to aurora-san!)
#
use strict;
use Digest::MD5 qw(md5_hex);
my $a = <<"EOD";
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70
EOD
my $b = <<"EOD";
d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c
2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 89
55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a
08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5b
d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6
dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0
e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1e
c6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70
EOD
print "Message A:\n", $a;
print "Message B:\n", $b;
$a =~ s/\s+//g;
$b =~ s/\s+//g;
$a = pack("H*", $a);
$b = pack("H*", $b);
print "MD5(A) = ", md5_hex($a), "\n";
print "MD5(B) = ", md5_hex($b), "\n";
open(FILE, "> a.dat") or die;
binmode(FILE);
print FILE $a;
close(FILE);
open(FILE, "> b.dat") or die;
binmode(FILE);
print FILE $b;
close(FILE);
以下が実行結果です。
Message A: d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c 2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 89 55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a 08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5b d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6 dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0 e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1e c6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70 Message B: d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c 2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 89 55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a 08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5b d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6 dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0 e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1e c6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70 MD5(A) = 79054025255fb1a26e4bc422aef54eb4 MD5(B) = 79054025255fb1a26e4bc422aef54eb4
補足: 以下の「576ビットのN」の素因数分解に対して、 RSA社によって1万ドルの賞金がかけられておりました。
N = 188198812920607963838697239461650439807163563379417382700763356422988859715234665485319060606504743045317388011303396716199692321205734031879550656996221305168759307650257059
この数が、2003年12月3日に素因数分解されました(!)。 2つの素数は、次の通りです。
p = 398075086424064937397125500550386491199064362342526708406385189575946388957261768583317
q = 472772146107435302536223071973048224632914695302097116459852171130520711256363590397527
詳しくは、RSA社のWebページを参照してください。
あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。