使用例

ここでのコマンドは、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) のようなエントロピーソースを取得することを検討してください。仮想マシンにエントロピーを配布するのに使用できます。

ワークフローは次のとおりです:

  1. 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 がデフォルトになります)。

  2. 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 のキーリングを以下に示します:

  3. gen_sym_key.sh スクリプトを使用して、Helen は Phil が新しいデータベース・ファイル cust.dat を暗号化する際に使用する対称暗号キーを生成します。キーの強さが2の場合、対称キーは、プロダクションでの使用に適しており、この例では Helen の公開キーで暗号化されたファイル helen_cust_dat.txt に格納されているので、Helen だけが解読できるようになっています。gen_sym_key.sh スクリプトには、対称暗号キーは表示されません; ディスク上のテキストファイルのキーはHelenの秘密キーでのみ解読できます。

  4. 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は以下の通りです。

  5. 今、add_db_key.sh スクリプトで、Phil は、GT.Mマスター・キー・ファイルにキーを追加するようになりました。その後、Philは、mupip create を使用して暗号化されたデータベース・ファイルを作成し、データとともにロードして使用することができます。データベースが作成され、データがロードされるまで、キーは値を持たず、自由に破棄することができます。データベースが作成され、データがロードされたら、データベースへのアクセス(またはそれのバックアップさえ)が必要とされる限り、キーを保持する必要があります。全体のプロセスを以下に示します:

  6. 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)などのキー管理サーバに公開キーをアップロードすることです。

inserted by FC2 system