ここでのコマンドは、GT.Mやシェル・スクリプトから呼び出されることで自動化できることを示すために、すべての行に対応しています。インタラクティブに使用するために、GPGで使用できる多くのグラフィカルユーザーインターフェイス(GUI)があります。これらの例はLinux上で生成されていますが、他のUNIXシステムでの使用は事実上同一でなければなりません。
これは、GPGと参照実装を使用したキー管理の例です。
Helen キー・マスター(helen@gt.m)はキーのマスターで、Phil キー・ユーザ(phil@gt.m)にデータベース・キーを提供します。Helen はデータベースを管理していません。Phil は、データベース・マネージャーですが、Phil はキーのマスターではありません。Helen と Phil は、安全に通信するために、GPGキー・リングを設定し、公開キー/秘密キーのペアを生成し、お互いの公開キーを交換して認証します。これにより、データベースに使用されている対称暗号のキーの安全な転送が可能になります。警告:仮想マシンまたはエントロピーの供給が不十分な他のコンピュータシステムでキー生成を試みると、gen_key_pair.sh スクリプトは非常に非常に長い時間がかかります。同様に、豊富なエントロピーの提供がないマシン上の gen_sym_key.sh スクリプトのキー品質 2(key quality of 2) は、あなたの根気にも重い負担をかけることがあります。多くのエントロピーを持つ物理的なコンピュータシステムを使用してください。できるなら、egd (http://egd.sourceforge.net) のようなエントロピー収集デーモンを使うか、Entropy Key (http://www.entropykey.co.uk) のようなエントロピーソースを取得することを検討してください。仮想マシンにエントロピーを配布するのに使用できます。
ワークフローは次のとおりです:
Helen と Phil はそれぞれ新しいGPGキーリングと新しい公開キーと秘密キーのペアを作成します [7] 。In the gen_keypair.sh script GPG generates the key pair [8], putting gen_keypair.sh スクリプトでは、GPGはキーペア [8] を生成し、公開キーと秘密キーをキーリングに入れます; 後者はパスフレーズでロックされています。公開キーはテキストファイルにもエクスポートされ、フィンガープリントはターミナル・セッションで表示されます。各自は、自分の公開キー・テキスト・ファイルを他の [9] に電子メールで(または別の方法で)送信します。以下にその例を示します; 最初の Helen、そして Phil(GNUPGHOME環境変数が設定されていない場合、 $HOME/.gnupg
がデフォルトになります)。
Helen は Helen@gt.m_pubkey.txt に、エクスポートされた公開キーを Phil に含むファイルを電子メールで送信し、Phil はHelen に公開キーを公開した phil@gt.m_pubkey.txtを送信します。「通信を傍受し、しばしば変更する敵 ("man in the middle")」の攻撃から保護するために、彼らは電話で話してキー・フィンガープリントを交換したり、文字メッセージやファクシミリでフィンガープリントをお互いに送信したりします。それは、キーを交換するのに使用されるものとは異なる通信チャネルです。Phil は Helen のキーと同様にそうです。import_and_sign_key.sh シェルスクリプトを使用します。Phil と Helen は、お互いの公開キーをインポートして署名した後、盗聴者がいても安全に通信できます。Phil がインポートしたキーを持つ Helen のキーリングを以下に示します:
gen_sym_key.sh スクリプトを使用して、Helen は Phil が新しいデータベース・ファイル cust.dat を暗号化する際に使用する対称暗号キーを生成します。キーの強さが2の場合、対称キーは、プロダクションでの使用に適しており、この例では Helen の公開キーで暗号化されたファイル helen_cust_dat.txt に格納されているので、Helen だけが解読できるようになっています。gen_sym_key.sh スクリプトには、対称暗号キーは表示されません; ディスク上のテキストファイルのキーはHelenの秘密キーでのみ解読できます。
encrypt_sign_db_key.sh スクリプトを使用すると、Helen は自身の秘密キーを使用して helen_cust_dat.txt の対称暗号キーを復号化し、Phil の公開キーで暗号化し、秘密キーで署名して phil_cust_dat.txt というファイルを作成します。Helen はこのファイルを電子メールの添付ファイルとして、またはディスク上の相互に合意された場所に置いて、Phil に送信します。前述のように、キーはディスク上にあっても、Phil の秘密キーでのみ解読することができます。Helen がトラックにぶつかったり辞めたりしても、Phil はそのキーにアクセスでき、同じ encrypt_sign_db_key.sh スクリプトを使用して、Helen の後継者であるXavierにキーを提供することができます。Phil のキーを準備しているHelenは以下の通りです。
今、add_db_key.sh スクリプトで、Phil は、GT.Mマスター・キー・ファイルにキーを追加するようになりました。その後、Philは、mupip create を使用して暗号化されたデータベース・ファイルを作成し、データとともにロードして使用することができます。データベースが作成され、データがロードされるまで、キーは値を持たず、自由に破棄することができます。データベースが作成され、データがロードされたら、データベースへのアクセス(またはそれのバックアップさえ)が必要とされる限り、キーを保持する必要があります。全体のプロセスを以下に示します:
Helen は正しい対称暗号キーと正しい暗号でデータベースが作成されたことを確認する最終チェックとして、Helenは、 gen_sym_hash.sh スクリプトを使用してhelen_cust_dat.txt のキーからハッシュを計算し、Phil は GT.Mの dse dump -fileheader -all コマンドを使用して、Phil が作成したデータベース・ファイルのファイル・ヘッダーからキーを出力します。ハッシュが一致する場合、データベース・ファイルは正しく作成されています。
以下は、上記のキー管理の例のスクリプトです。
Helen は、公開キーと秘密キーのペアを持つ新しいGPGキーリングを作成します。
helen$ export GNUPGHOME=$PWD/.helengnupg helen$ $gtm_dist/plugin/gtmcrypt/gen_keypair.sh helen@gt.m Helen Keymaster Passphrase for new keyring: Verify passphrase: Key ring will be created in /home/helen/.helengnupg Key generation might take some time. Do something that will create entropy, like moving the mouse or typing in another session. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u /home/helen/.helengnupg/pubring.gpg --------------------------------- pub 1024D/BC4D0739 2010-05-07 Key fingerprint = B38B 2427 5921 FFFA 5278 8A91 1F90 4A46 BC4D 0739 uid Helen Keymaster <helen@gt.m> sub 2048R/A2E8A8E8 2010-05-07 Key pair created and public key exported in ASCII to helen@gt.m_pubkey.txt helen$
Phil は、公開キーと秘密キーのペアを持つ新しいGPG鍵リングを作成します:
phil$ export GNUPGHOME=$PWD/.philgnupg phil$ $gtm_dist/plugin/gtmcrypt/gen_keypair.sh phil@gt.m Phil Keyuser Passphrase for new keyring: Verify passphrase: Key ring will be created in /home/phil/.philgnupg Key generation might take some time. Do something that will create entropy, like moving the mouse or typing in another session. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u /home/phil/.philgnupg/pubring.gpg --------------------------------- pub 1024D/A5719A99 2010-05-07 Key fingerprint = 886A BAFC E156 A9AD 7EA9 06EA 8B8B 9FAC A571 9A99 uid Phil Keyuser <phil@gt.m> sub 2048R/AD37D5A0 2010-05-07 Key pair created and public key exported in ASCII to phil@gt.m_pubkey.txt phil$
次に、Helen は Phil にファイル helen@gt.m_pubkey.txt を送信し、Phil は Helen にファイルphil@gt.m_pubkey.txtを送信します。
Helen は Phil の公開キーをキーリングにインポートし、インポート時にフィンガープリントを認証し、署名してフィンガープリントを印象したことを確認します。
helen$ $gtm_dist/plugin/gtmcrypt/import_and_sign_key.sh phil@gt.m_pubkey.txt phil@gt.m gpg: key A5719A99: public key "Phil Keyuser <phil@gt.m>" imported gpg: Total number processed: 1 gpg: imported: 1 ######################################################### pub 1024D/A5719A99 2010-05-07 Key fingerprint = 886A BAFC E156 A9AD 7EA9 06EA 8B8B 9FAC A571 9A99 uid Phil Keyuser <phil@gt.m> sub 2048R/AD37D5A0 2010-05-07 ######################################################### Please confirm validity of the fingerprint above (y/n/[?]): y Passphrase for keyring: Successfully signed public key for phil@gt.m received in phil@gt.m_pubkey.txt helen$
Phil は同様に、Helen の公開キーをインポート、検証、署名します。
phil$ $gtm_dist/plugin/gtmcrypt/import_and_sign_key.sh helen@gt.m_pubkey.txt helen@gt.m gpg: key BC4D0739: public key "Helen Keymaster <helen@gt.m>" imported gpg: Total number processed: 1 gpg: imported: 1 ######################################################### pub 1024D/BC4D0739 2010-05-07 Key fingerprint = B38B 2427 5921 FFFA 5278 8A91 1F90 4A46 BC4D 0739 uid Helen Keymaster <helen@gt.m> sub 2048R/A2E8A8E8 2010-05-07 ######################################################### Please confirm validity of the fingerprint above (y/n/[?]): y Passphrase for keyring: Successfully signed public key for helen@gt.m received in helen@gt.m_pubkey.txt phil$
Helen と Phil は情報を安全に交換できるようになりました。
Helen は、新しいデータベース・ファイル cust.dat の対称暗号キーを生成します。
helen$ $gtm_dist/plugin/gtmcrypt/gen_sym_key.sh 2 helen_cust_dat.txt helen$
次に、Phil の公開キーで対称暗号キーを暗号化して署名し、Phil が送ることができるphil_cust_dat.txt ファイルを生成します。
helen$ $gtm_dist/plugin/gtmcrypt/encrypt_sign_db_key.sh helen_cust_dat.txt phil_cust_dat.txt phil@gt.m Passphrase for keyring: gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: depth: 1 valid: 1 signed: 0 trust: 1-, 0q, 0n, 0m, 0f, 0u helen$
Phil は phil_cust_dat.txt のキーをマスター・キー・ファイル $HOME/.gtm_dbkeysに追加します。
phil$ export gtm_dbkeys=$HOME/.gtm_dbkeysphil$ $gtm_dist/plugin/gtmcrypt/add_db_key.sh $PWD/gtm.dat phil_cust_dat.txt $gtm_dbkeys phil$
Phil はグローバル・ディレクトリを作成し、次回の作成時に暗号化されることを指定するデータベース・ファイル cust.dat の構成パラメータを変更します。(グローバル変数名からデータベースファイル名へのマッピングを除いて、グローバル・ディレクトリ内の設定パラメータは、MUPIPが新しいデータベースファイルを作成する場合にのみ使用されることを覚えておいてください)。その後、Phil が、データベース・ファイルを作成し、DSE dump -fileheader を実行して(出力で強調表示されている)ハッシュを抽出し、検証のために Helen に送信します(すでに存在する mumps.datファイルに対してMUPIP CREATEがエラーを生成しますが、暗号化された新しい cust.datファイルが作成されることに注意してください)。
phil$ export gtmgbldir=gtm.gld phil$ export gtm_passwd="" phil$ $gtm_dist/mumps -dir Enter Passphrase: GTM>zsystem "$gtm_dist/mumps -run GDE" %GDE-I-LOADGD, Loading Global Directory file /var/myApp/databases/gtm.gld %GDE-I-VERIFY, Verification OK GDE> change -segment DEFAULT -encryption GDE> exit %GDE-I-VERIFY, Verification OK %GDE-I-GDUPDATE, Updating Global Directory file /var/myApp/databases/gtm.gld GTM>zsystem "$gtm_dist/mupip create" Created file /var/myApp/databases/gtm.dat Error opening file /var/myMpp/databases/mumps.dat : File exists %GTM-F-DBNOCRE, Not all specified database files, or their associated journal files were created GTM>zsystem "dse" File /var/myApp/databases/cust.dat Region CUST DSE> dump -fileheader -all File /var/myApp/databases/cust.dat Region CUST Date/Time 04-MAY-2010 11:24:10 [$H = 61850,41050] Access method BG Global Buffers 1024 Reserved Bytes 0 Block size (in bytes) 1024 Maximum record size 256 Starting VBN 129 Maximum key size 64 Total blocks 0x00000065 Null subscripts NEVER Free blocks 0x00000062 Standard Null Collation FALSE Free space 0x00000000 Last Record Backup 0x0000000000000001 Extension Count 100 Last Database Backup 0x0000000000000001 Number of local maps 1 Last Bytestream Backup 0x0000000000000001 Lock space 0x00000028 In critical section 0x00000000 Timers pending 0 Cache freeze id 0x00000000 Flush timer 00:00:01:00 Freeze match 0x00000000 Flush trigger 960 Current transaction 0x0000000000000001 No. of writes/flush 7 Maximum TN 0xFFFFFFFFE3FFFFFF Certified for Upgrade to V5 Maximum TN Warn 0xFFFFFFFF73FFFFFF Desired DB Format V5 Master Bitmap Size 112 Blocks to Upgrade 0x00000000 Create in progress FALSE Modified cache blocks 0 Reference count 1 Wait Disk 0 Journal State DISABLED Mutex Hard Spin Count 128 Mutex Sleep Spin Count 128 Mutex Spin Sleep Time 2048 KILLs in progress 0 Replication State OFF Region Seqno 0x0000000000000001 Zqgblmod Seqno 0x0000000000000000 Zqgblmod Trans 0x0000000000000000 Endian Format LITTLE Commit Wait Spin Count 16 Database file encrypted TRUE Dualsite Resync Seqno 0x0000000000000001 DB Current Minor Version 8 Blks Last Record Backup 0x00000000 Last GT.M Minor Version 8 Blks Last Stream Backup 0x00000000 DB Creation Version V5 Blks Last Comprehensive Backup 0x00000000 DB Creation Minor Version 8 Total Global Buffers 0x00000400 Phase2 commit pid count 0x00000000 Dirty Global Buffers 0x00000000 Write cache timer count 0xFFFFFFFF Free Global Buffers 0x00000400 wcs_wtstart pid count 0x00000000 Write Cache is Blocked FALSE wcs_wtstart intent cnt 0x00000000 Actual kills in progress 0 Abandoned Kills 0 Process(es) inhibiting KILLs 0 DB Trigger cycle of ^#t 0 MM defer_time 0 Database file encryption hash 12D119C93E28BBA9389C6A7FD53C2373CFF7181DF48FEF 213523B7B38199EF18B4BADB232D30CBDA2DBFC5F85D97D7A5C4A3E3D13276DCBB63B30EBDAA6B5 DD7 Full Block Writes OFF Full Block Write Len 0 TP blkmod nomod 0 TP blkmod gvcst_srch 0 TP blkmod t_qread 0 TP blkmod tp_tend 0 TP blkmod tp_hist 0 Free blocks 992 Backup blocks 0 Reformat blocks 0 Total blocks 992 Shmpool blocked FALSE File Offset 0x0000000000000000 Shmpool crit holder 0 Backup_errno 0 Backup Process ID 0 Backup TN 0x0000000000000000 Inc Backup TN 0x0000000000000000 Process Failed 0 Allocs since check 0 Backup Image Count 0 Temp File: Database is Fully Upgraded : TRUE Database WAS ONCE Fully Upgraded from V4 : TRUE Blocks to Upgrade subzero(negative) error : 0x00000000 TN when Blocks to Upgrade last became 0 : 0x0000000000000000 TN when Desired DB Format last changed : 0x0000000000000000 TN when REORG upgrd/dwngrd changed dbfmt : 0x0000000000000000 Block Number REORG upgrd/dwngrd will restart from : 0x00000000 Upd reserved area [% global buffers] 50 Avg blks read per 100 records 200 Pre read trigger factor [% upd rsrvd] 50 Upd writer trigger [%flshTrgr] 33 Snapshot in progress FALSE Number of active snapshots 0 Snapshot cycle 0 Active snapshot PID 0 Snapshot TN 0 Total blocks 0 Free blocks 0 Process failed 0 Failure errno 0 Snapshot shared memory identifier -1 Snapshot file name DSE> exit GTM>halt $
Phil は Helen にハッシュ、Helen の mobileのテキスト、またはEメールを送信します。Helen は、生成したキーのハッシュが Phil によって作成されたデータベース・ファイルのハッシュと一致し、Helenの承認をPhilに伝えるようにします。Phil はデータベースを使用できるようになりました。Phil または Helen のいずれかが、データベースへのアクセスが許可され、安全にキーを交換した他のユーザーにキーを提供できます。
helen$ $gtm_dist/plugin/gtmcrypt/gen_sym_hash.sh helen_cust_dat.txt Passphrase for keyring:gpg: encrypted with 2048-bit RSA key, ID A2E8A8E8, created 2010-05-07" Helen Keymaster <helen@gt.m>"178E55E32DAD6BFF761BF917412EF31904C... helen$
暗号化されたデータベースファイル cust.dat は使用できるようになりました。そのファイル、すべてのジャーナルファイル、バックアップ、バイナリ抽出はすべて同じ対称暗号と暗号鍵を持ちますが、そのデータベースファイル、そのジャーナルファイル、抽出およびバックアップのデータにアクセスする必要がある限り、その暗号とキーのコピー (アクセス権のあるすべての人の公開鍵で暗号化されています)を提供するソフトウェアライブラリは保持されなければなりません。
次のコマンドシーケンス図は、Helen と Phil が互いにどのように動作するかを示しています。
[7] すでにGPGキーリングと公開キーと秘密キーがある場合は、この手順を省略できます。ただし、Gnu Privacy Guard ver.2 の操作に関する下記のセクションを参照してください。
[8] Generatng 公開-秘密のキーのペアの生成は、コンピュータ・システムにエントロピーのかなりの量を消費することができます。エントロピーが足りなくなると、十分なエントロピーが得られるまで動作が停止することがあります。キー生成が頻繁に発生するコンピュータ・システムの外部エントロピーのソースまたはエントロピー収集デーモンを考慮する必要があるかもしれません。仮想マシン上の暗号化されたデータベースの場合、ホストコンピュータ上で公開キーと秘密キーのペアを生成し、仮想ゲストにキー・リングを発送する必要があります。
[9] 公開キーを直接送信する方法の1つは、MIT PGP公開鍵サーバ( http://pgp.mit.edu)などのキー管理サーバに公開キーをアップロードすることです。