Tipsの表記を更新
[gnupg-kouza-page.git] / src / anonymous-recipients.org
1 # -*- coding: utf-8-unix -*-
2 #+TITLE:     受信者秘匿機能の利用
3 #+AUTHOR:    斉藤英樹
4 #+EMAIL:     hideki@hidekisaito.com
5 #+DESCRIPTION: Emacs Builds prepared by Hideki Saito
6 #+KEYWORDS: Emacs, software, OSS, compile, build, binaries
7
8 #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="style.css" />
9 #+HTML_HEAD: <script type="text/javascript">
10 #+HTML_HEAD:
11 #+HTML_HEAD:  var _gaq = _gaq || [];
12 #+HTML_HEAD:  _gaq.push(['_setAccount', 'UA-114515-7']);
13 #+HTML_HEAD:  _gaq.push(['_trackPageview']);
14 #+HTML_HEAD:
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);
19 #+HTML_HEAD:  })();
20 #+HTML_HEAD: </script>
21
22 #+LANGUAGE:  ja
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
25 #+OPTIONS: ^:{}
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
31 #+XSLT:
32
33
34 * 受信者秘匿機能について
35   :PROPERTIES:
36   :ID:       fbfd4544-bdf3-4227-a87f-3bc89328e885
37   :END:
38 ** 受信者秘匿とは?
39    :PROPERTIES:
40    :ID:       c4c846ef-c2f2-4a35-aa55-4fed828ab15c
41    :END:
42 受信者秘匿機能は暗号化処理を行なう際に暗号化対象者の情報を匿名化し、暗号の宛先を読みとれないようにする処理です。
43
44 例えば他人に対する暗号を復号しようとすると以下のような表示になります。
45
46 #+BEGIN_EXAMPLE
47 gpg: encrypted with 1024-bit RSA key, ID D69E7A73, created 2013-07-26
48       "Test Key (Not for deployment) <test@example.com>"
49 gpg: decryption failed: No secret key
50 #+END_EXAMPLE
51
52
53 上記はその暗号の対象者の公開鍵を持っていて、秘密鍵を持っていない場合の表示ですが、このように複合ができなくとも、そのメッセージが誰に向けて送られたのか、という情報が含まれることになります。
54
55 公開鍵がない場合は上記のように名前こそは表示されませんが、それでもメッセージの頻度などからある程度推測が可能な場合もあります。[fn::これをトラフィック分析といいます]
56
57 受信者秘匿を行なうと、上記の代りに以下のような表示になります。
58
59 #+BEGIN_EXAMPLE
60 gpg: anonymous recipient; trying secret key xxxxxxxx ...
61 gpg: anonymous recipient; trying secret key xxxxxxxx ...
62
63 gpg: encrypted with RSA key, ID 00000000
64 gpg: decryption failed: No secret key
65 #+END_EXAMPLE
66
67 これは受信者に関する情報が暗号に含まれていないため、手持ちの鍵で試行するという形になります。
68
69 普通の暗号が名前の書いてある鍵付きのロッカーだとすると、受信者秘匿暗号は無記名のロッカーであると言えます。誰のロッカーか分からないので、手持ちの鍵で開くか試すまで自分が開けるのに必要な鍵を持っているかすら分かりません。
70
71 ** なぜ秘匿するのか?
72    :PROPERTIES:
73    :ID:       da8952a9-3eb7-420c-907f-33f1fbdb2243
74    :END:
75 昨今のNSAなどのスキャンダルから、諜報機関は主にメタデータを取得していることが明らかになってきました。メタデータは通信の内容ではなく、その通信が誰に向けて宛てられているのかなどの情報を含みます。
76
77 特に機密を要する情報などに関しては暗号の中身はもちろん、そのメタデータも保護するのが必要になってきます。
78
79 * GnuPGでの使用法
80   :PROPERTIES:
81   :ID:       6956d790-f607-4383-be50-110b89ba403e
82   :END:
83 GnuPGでは、受信者指定の際に「r」オプションを使用する変わりに「R」を使用することにより実現できます。つまり、以下の違いです。
84
85 通常の場合は
86 #+BEGIN_EXAMPLE
87 gpg -r D69E7A73 -e hoge.txt
88 #+END_EXAMPLE
89
90 受信者秘匿の場合は
91 #+BEGIN_EXAMPLE
92 gpg -R D69E7A73 -e hoge.txt
93 #+END_EXAMPLE
94
95 このオプションは組み合わせて使うことも可能です。
96
97 #+BEGIN_EXAMPLE
98 gpg -r D69E7A73 -R E23E7A34 -e hoge.txt
99 #+END_EXAMPLE
100
101 throw-keyidオプションを使用することで、これを強制することも可能です。
102
103 #+BEGIN_EXAMPLE
104 gpg --throw-keyid -r D69E7A73 -e hoge.txt
105 #+END_EXAMPLE
106
107 上記の場合は、通常の「r」オプションが使用されていますが、「throw-keyid」が指定されているので、秘匿されます。
108
109
110 * セキュリティ面での注意点
111   :PROPERTIES:
112   :ID:       1a6367b3-f985-48a0-a7c4-db1a640ca0ea
113   :END:
114 ** 配布方法による分析
115    :PROPERTIES:
116    :ID:       cbf0e296-193d-40a0-b03f-f92e934a26d5
117    :END:
118 この方法で秘匿することにより、暗号自体の宛先の秘匿はできますが、それをメールなどで送信することにより、その送信事実はメタデータとして記録されます。対策としては以下のようなものが考えられます。
119 *** 同報の利用
120     :PROPERTIES:
121     :ID:       20cefa37-9821-4107-a8c1-1304b14b7111
122     :END:
123 暗号を使用する通信はメーリングリストなど、同報を通じて行ない、暗号を受けとる可能性のある人物を加入しておきます。受信者は自分宛、もしくはそのグループの他人宛のメッセージの両方を受けとり、それぞれ、受信時に各々の環境で復号を試行します。
124 通信量は増えますが、外部から誰に向けて宛てられたのかの分析が飛躍的に難しくなります。
125 ** ダミー受信者の使用
126    :PROPERTIES:
127    :ID:       7a7d0c77-fb72-4715-b94b-0684a20c01e6
128    :END:
129 予め、鍵を生成した上で、秘密鍵のみを破棄した鍵をいくつか作成しておき、暗号時に、それらの鍵に対しても秘匿暗号化を行います。こうすることによる狙いは暗号が宛てられている人数を秘匿することです。また、これを応用することにより、宛先が誰でもないメッセージを流すことにより、どのようなタイミングで通信が行なわれているかなどの把握を外部から行われるのを防止する効果があります。
130
131 * 制限事項など
132   :PROPERTIES:
133   :ID:       ffbb580e-b432-4d14-a39a-1f18b3c23e12
134   :END:
135 ** PGPとの非互換
136    :PROPERTIES:
137    :ID:       345f8a35-39b0-46bf-a9bf-f86bf85d29c8
138    :END:
139 GnuPGでは長らく対応されていたこの機能ですが、PGPでは対応していません。[fn::尚、Mac版においてはPGPでも動作するのを確認しています。但し復号のみ]
140
141 ** MUIとの非互換
142    :PROPERTIES:
143    :ID:       7d085d15-e331-4c02-a883-6c8105bf5918
144    :END:
145 Enigmailなどではサポートされません。
146
147
148 * 最後に
149   :PROPERTIES:
150   :ID:       77e07abf-b728-4786-87fb-eb75ccf9325d
151   :END:
152 このように秘匿暗号化を使用することにより、通信内容面以外に、そのメタデータも秘匿することが可能になります。通信傍受の仕組みなどの情報が明らかになるにつれ、メタデータの秘匿はこれから大きなテーマになってくるかと思います。
153
154 現在は制限事項などのため、日常でメールなどに使用することは難しいかもしれませんが、工夫して利用することにより、強力な通信手法になるかと思います。
155
156 #+BEGIN_HTML
157 <script type="text/javascript"><!--
158 google_ad_client = "ca-pub-6327257212970697";
159 /* GNU Privacy Guard講座Banner */
160 google_ad_slot = "2155169100";
161 google_ad_width = 970;
162 google_ad_height = 90;
163 //-->
164 </script>
165 <script type="text/javascript"
166 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
167 </script>
168 #+END_HTML