1 # -*- coding: utf-8-unix -*-
4 #+EMAIL: hideki@hidekisaito.com
5 #+DESCRIPTION: Emacs Builds prepared by Hideki Saito
6 #+KEYWORDS: Emacs, software, OSS, compile, build, binaries
8 #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="style.css" />
9 #+HTML_HEAD: <script type="text/javascript">
11 #+HTML_HEAD: var _gaq = _gaq || [];
12 #+HTML_HEAD: _gaq.push(['_setAccount', 'UA-114515-7']);
13 #+HTML_HEAD: _gaq.push(['_trackPageview']);
15 #+HTML_HEAD: (function() {
16 #+HTML_HEAD: var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
17 #+HTML_HEAD: ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
18 #+HTML_HEAD: var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
20 #+HTML_HEAD: </script>
23 #+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
24 #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
26 #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:h
27 #+EXPORT_SELECT_TAGS: export
28 #+EXPORT_EXCLUDE_TAGS: noexport
29 #+HTML_LINK_UP: index.html
30 #+HTML_LINK_HOME: index.html
36 受信者秘匿機能は暗号化処理を行なう際に暗号化対象者の情報を匿名化し、暗号の宛先を読みとれないようにする処理です。
38 例えば他人に対する暗号を復号しようとすると以下のような表示になります。
41 gpg: encrypted with 1024-bit RSA key, ID D69E7A73, created 2013-07-26
42 "Test Key (Not for deployment) <test@example.com>"
43 gpg: decryption failed: No secret key
47 上記はその暗号の対象者の公開鍵を持っていて、秘密鍵を持っていない場合の表示ですが、このように複合ができなくとも、そのメッセージが誰に向けて送られたのか、という情報が含まれることになります。
49 公開鍵がない場合は上記のように名前こそは表示されませんが、それでもメッセージの頻度などからある程度推測が可能な場合もあります。[fn::これをトラフィック分析といいます]
51 受信者秘匿を行なうと、上記の代りに以下のような表示になります。
54 gpg: anonymous recipient; trying secret key xxxxxxxx ...
55 gpg: anonymous recipient; trying secret key xxxxxxxx ...
57 gpg: encrypted with RSA key, ID 00000000
58 gpg: decryption failed: No secret key
61 これは受信者に関する情報が暗号に含まれていないため、手持ちの鍵で試行するという形になります。
63 普通の暗号が名前の書いてある鍵付きのロッカーだとすると、受信者秘匿暗号は無記名のロッカーであると言えます。誰のロッカーか分からないので、手持ちの鍵で開くか試すまで自分が開けるのに必要な鍵を持っているかすら分かりません。
66 昨今のNSAなどのスキャンダルから、諜報機関は主にメタデータを取得していることが明らかになってきました。メタデータは通信の内容ではなく、その通信が誰に向けて宛てられているのかなどの情報を含みます。
68 特に機密を要する情報などに関しては暗号の中身はもちろん、そのメタデータも保護するのが必要になってきます。
71 GnuPGでは、受信者指定の際に「r」オプションを使用する変わりに「R」を使用することにより実現できます。つまり、以下の違いです。
75 gpg -r D69E7A73 -e hoge.txt
80 gpg -R D69E7A73 -e hoge.txt
83 このオプションは組み合わせて使うことも可能です。
86 gpg -r D69E7A73 -R E23E7A34 -e hoge.txt
89 throw-keyidオプションを使用することで、これを強制することも可能です。
92 gpg --throw-keyid -r D69E7A73 -e hoge.txt
95 上記の場合は、通常の「r」オプションが使用されていますが、「throw-keyid」が指定されているので、秘匿されます。
100 この方法で秘匿することにより、暗号自体の宛先の秘匿はできますが、それをメールなどで送信することにより、その送信事実はメタデータとして記録されます。対策としては以下のようなものが考えられます。
102 暗号を使用する通信はメーリングリストなど、同報を通じて行ない、暗号を受けとる可能性のある人物を加入しておきます。受信者は自分宛、もしくはそのグループの他人宛のメッセージの両方を受けとり、それぞれ、受信時に各々の環境で復号を試行します。
103 通信量は増えますが、外部から誰に向けて宛てられたのかの分析が飛躍的に難しくなります。
105 予め、鍵を生成した上で、秘密鍵のみを破棄した鍵をいくつか作成しておき、暗号時に、それらの鍵に対しても秘匿暗号化を行います。こうすることによる狙いは暗号が宛てられている人数を秘匿することです。また、これを応用することにより、宛先が誰でもないメッセージを流すことにより、どのようなタイミングで通信が行なわれているかなどの把握を外部から行われるのを防止する効果があります。
109 GnuPGでは長らく対応されていたこの機能ですが、PGPでは対応していません。[fn::尚、Mac版においてはPGPでも動作するのを確認しています。但し復号のみ]
112 Enigmailなどではサポートされません。
116 このように秘匿暗号化を使用することにより、通信内容面以外に、そのメタデータも秘匿することが可能になります。通信傍受の仕組みなどの情報が明らかになるにつれ、メタデータの秘匿はこれから大きなテーマになってくるかと思います。
118 現在は制限事項などのため、日常でメールなどに使用することは難しいかもしれませんが、工夫して利用することにより、強力な通信手法になるかと思います。
121 <script type="text/javascript"><!--
122 google_ad_client = "ca-pub-6327257212970697";
123 /* GNU Privacy Guard講座Banner */
124 google_ad_slot = "2155169100";
125 google_ad_width = 970;
126 google_ad_height = 90;
129 <script type="text/javascript"
130 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">