受信者秘匿機能の利用
[gnupg-kouza-page.git] / src / pgpzip.org
1 # -*- coding: utf-8-unix -*-
2 #+TITLE:     PGP Zipの取り扱い方法
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 PGPにはPGP Zipと呼ばれるアーカイブの作成をすることができるようになっています。
36
37 * ファイル構造
38
39 PGP Zipはファイル構成的には複数のファイルをtarにより単一化したものを暗号化するという構成をとっています。PGP Zipそのものがサポートされていない環境においてもこの処理を手動で行うことにより、PGP Zipとして扱えるファイルを作成することができます。
40
41 ** コマンドラインの例
42
43 *** gpg-zipスクリプトがGnuPGに同梱されている環境の場合
44
45 gpg-zipスクリプトがGnuPGとともに配布されている環境(シェルスクリプトが使用できる環境)である場合はgpg-zipスクリプトを使用することにより互換性のあるファイルが作成できます。
46
47 #+BEGIN_SRC sh
48 gpg-zip -e [ファイル名1] [ファイル名2] …
49 #+END_SRC
50
51 *** gpg-zipスクリプトが使用できない場合
52
53 gpg-zipが使用できない場合はtarコマンド(もしくは7-zipなど、tarファイルが作成できるソフト)を使用することにより可能です。(尚、基本的にはtar環境が標準で使用できる環境にいる場合は恐らくgpg-zipコマンドも使用できる可能性が高いです。)尚、Windows環境で動作するtarコマンドはGNU utilities for Win32で入手できます。
54
55 ** tarファイルの作成
56
57 tarコマンドを使用してファイルを作成する場合は以下のようにします。
58
59 #+BEGIN_SRC sh
60 tar -c ファイル名 > file.tar
61 #+END_SRC
62
63 ** 暗号化・署名
64
65 作成したtarファイルを暗号化する際に、–set-filenameオプションを使用します。
66
67 #+BEGIN_SRC sh
68 gpg -o file.pgp -e file.tar –set-filename “foo.tar”
69 #+END_SRC
70
71 fooのところは任意の名称で構いません。この–set-filenameで.tarの名前がついたファイル名が指定されていない場合は正常動作しません。(後述)
72 この方法で作成したファイルはPGPでもPGP Zipとして取り扱えるようになります。
73
74 ** 上記を組み合わせた方法
75
76 パイプを使うことにより上記を組み合わせることもできます。
77
78 #+BEGIN_SRC sh
79 tar -c [ファイル名] | gpg -o file.pgp -e –set-filename “foo.tar”
80 #+END_SRC
81
82 ** 復号化
83
84 PGPや上記の方法で作成したPGP Zipファイルを復号化する際は反対に暗号化されているものをtarファイルに復号化した後、tarファイルを解凍する方法になります。
85
86 #+BEGIN_SRC sh
87 gpg -o file.tar -d file.pgp tar xvf file.tar
88 #+END_SRC
89
90 パイプを使用した場合は次のとおりです。
91
92 #+BEGIN_SRC sh
93 gpg -d file.pgp | tar xv
94 #+END_SRC
95
96 尚、処理系が異なると日本語のファイル名は文字化けします。(特にWindowsとMac/Linuxの間)ただし、検証自体は処理間の形式に対して行われますので署名の判定に関しては正しいものとなります。
97
98 ** Macの場合の注意
99
100 Macの場合はtarコマンドではなくgnutarコマンドを使用してください。尚、環境変数としてCOPYFILE_DISABLE=trueが指定されていないとAppleDouble(file.txtに対応する._file.txtのようなファイルとして)として拡張属性が含まれてしまいますのでご注意ください。
101
102 * Kleopatraのオプションは使用できるか(Gpg4Win Windows、KDE環境)
103
104 Kleopatraを使用しファイルをKleopatraウインドウにドラッグ・ドロップした上で、Encrypt/Signを選択、Archive files with:のチェックボックスを有効にしTAR (PGP®-compatible)を選択することができるようになっています。バージョン2.1.0で検証してみると、これを使用した場合、ファイル名が正常に埋めこまれないため、PGP(10.2で検証)ではtarファイルをファイルとして扱う挙動を見せてしまいます。そのため、現状は受け取ったPGP Zipファイルを復号することは可能ですが、暗号化には使用しない方がいいでしょう。
105
106 ** 埋めこまれたファイル名の違い
107
108 *** Kleopatraで作成した場合
109 #+BEGIN_EXAMPLE
110 :literal data packet:
111 mode b (62), created 1315533132, name=”",
112 raw data: unknown length
113 #+END_EXAMPLE
114 *** PGPで作成した場合
115 #+BEGIN_EXAMPLE
116 :literal data packet:
117 mode b (62), created 0, name=”pgpTmpArchive2020.tar”,
118 raw data: unknown length
119 #+END_EXAMPLE
120
121 #+BEGIN_HTML
122 <script type="text/javascript"><!--
123 google_ad_client = "ca-pub-6327257212970697";
124 /* GNU Privacy Guard講座Banner */
125 google_ad_slot = "2155169100";
126 google_ad_width = 970;
127 google_ad_height = 90;
128 //-->
129 </script>
130 <script type="text/javascript"
131 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
132 </script>
133 #+END_HTML