多くの組織が紙のドキュメントからデジタル ドキュメントに移行するにつれて、機密性の高いデジタル ドキュメントを管理するためにデジタル署名が必要になります。受信者が送信者を信頼するかどうかを決定できるように、デジタル署名を使用してメッセージの送信元を認証できます。今日では、ソフトウェアの配布と金融取引に最も広く使用されています。
公開鍵暗号方式では、秘密鍵を使用してファイルに署名することができます。対応する公開鍵を持っている人なら誰でも、ファイルが秘密鍵によって署名されているかどうかを確認できます。秘密鍵を持っていない人は、そのような署名を偽造することはできません。
デジタル署名は、送信者の認証と否認防止に使用できます。署名者は、ドキュメントに署名していないと主張することはできません。
現在、デジタル署名はソフトウェア配布において重要な役割を果たしています。 Debian ミラーからソフトウェアをインストールする場合、ソフトウェアがダウンロードされると、署名を検証することでソフトウェアが信頼できるソースからのものであるかどうかが検証されるため、パッケージが信頼できるソースからのものであることが保証されます。
ここで、GnuPG ツールを使用してドキュメントに署名するさまざまな方法を見ていきます。
GnuPG ツールを初めて使用する場合は、まず基本的な gpg コマンドの使用方法を理解する必要があります。
デジタル署名は、ドキュメントを証明し、タイムスタンプを付けます。ドキュメントが何らかの方法で変更された場合、署名の検証は失敗します。
1.ファイルのデジタル署名を作成する
ドキュメントにデジタル署名するには、–sign オプションを使用します。ドキュメントの署名に使用される秘密鍵のロックを解除するために、パスフレーズを入力するよう求められます。
$ gpg --sign file.txt You need a passphrase to unlock the secret key for user: "lakshmanan (This is lakshmans key) " 2048-bit RSA key, ID 3630F8D6, created 2012-12-30 Enter passphrase:
これで、「file.txt.gpg」という名前のファイルがバイナリ形式で作成されます。入力ファイルは、ファイルに署名する前に圧縮されます。
2.デジタル署名を検証
署名された文書があれば、–verify オプションを使用して署名を検証できます。
$ gpg --verify file.txt.gpg gpg: Signature made Saturday 12 January 2013 11:17:46 PM IST using RSA key ID 3630F8D6 gpg: Good signature from "lakshmanan (This is lakshmans key) "
上記のコマンドは、作成された署名が適切であることを検証します。
3.ファイルからドキュメントを抽出
署名済みファイルから元のドキュメントを抽出するには、–decrypt オプションを使用します。 –output を使用して、実際のファイルの内容を保存する出力ファイルを指定できます。
$ gpg --output doc.txt --decrypt file.txt.gpg gpg: Signature made Saturday 12 January 2013 11:17:46 PM IST using RSA key ID 3630F8D6 gpg: Good signature from "lakshmanan (This is lakshmans key) "
これで、実際のドキュメントが doc.txt ファイルに保存されます。
4.書類への明確な署名
デジタル署名の一般的な用途は、電子メールの送信です。このような場合、ファイルをバイナリで圧縮して署名することは望ましくありません。 –clearsign オプションを使用して、ファイルを ASCII アーマー署名でラップすることができます。
$ gpg --output file.sig --clearsign file.txt
ここで、デジタル署名とファイル自体を含む file.sig という名前の ASCII ファイルが作成されます。
$ cat file.sig -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This is a test file -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQEcBAEBAgAGBQJQ8af1AAoJEHUf3BE2MPjWJ6QIAIoM7vZlvVD4PR4TgqKkUAr5 S4Pc/7tjkEquBcPfzHgm6MPdTd7kIvUzwHNkkST0FyB2cLzvx8wNf7Zp/kDYL0Uz /7UCocMPsDBYHasUY4XRfCDUkF0ER/NAFdiL9AUTvQf6oQxwuQG9sWxb6tcK8eiV U7BBvQvMl6RszP+e7VXgcDbNeYMrTDwrivP9BKwAFuBtZmRg0vQKnjenUyVJL6gJ tndkwtOd1XGpc5ZKCTRSKOoTonuUQAD1q0Pi6nmeaNskSqwVOxzQcV6lQ8nHJTh2 XfKSAopNriv405YfC1KO5H2Ffzee2jx+o3HqxfU1vQbHtP7uf4QqxUc2HtDnRNQ= =PN+K -----END PGP SIGNATURE-----
クリア署名されたドキュメントを検証することは、バイナリ署名されたドキュメントを検証することに似ています。
5.切り離された署名を作成
分離された署名の場合、新しいファイルが署名として作成されます。 –detach-sign オプションを使用して、切り離された署名を作成できます。
$ gpg --armor --detach-sig file.txt
これで、切り離された署名を含む file.txt.asc という名前の ASCII ファイルが作成されます。 –output を使用して、切り離された署名ファイル名を変更できます。
6.切り離された署名を確認
切り離された署名を検証するには、署名ファイルとデータ ファイルの両方が必要です。
$ gpg --verify file.txt.asc file.txt gpg: Signature made Sunday 13 January 2013 12:13:59 AM IST using RSA key ID 3630F8D6 gpg: Good signature from "lakshmanan (This is lakshmans key) "
file.txt を編集してみましょう。 file.txt にコンテンツを追加して、署名を検証してみてください。
$ echo "Append" >> file.txt $ gpg --verify file.txt.asc file.txt gpg: Signature made Sunday 13 January 2013 12:13:59 AM IST using RSA key ID 3630F8D6 gpg: BAD signature from "lakshmanan (This is lakshmans key) "
コンテンツが変更されているため、BAD 署名と言って検証に失敗しました。
7.ドキュメントの暗号化と署名
以前の投稿の 1 つで、GnuPG を使用してファイルを暗号化および復号化する方法についても詳しく説明しました。ただし、文書の暗号化と署名を同時に行いたい場合は、次のようにします:
$ gpg --sign --encrypt --recipient raman file.txt
上記のコマンドは、file.txt を暗号化し、ドキュメントにデジタル署名します。受信者は署名を検証し、–decrypt オプションを使用してドキュメントを復号化できます。