ノーツのフィールド暗号化の詳細について述べる前に、暗号化とは何かということを少し詳しく見ていきます。(より詳しくお知りになりたい場合は、ブルース・シュナイアー(Bruce Schnier)氏の Applied Cryptography(応用暗号学)を参照してください。ですが、この本は数学が苦手な人にとってはとても難解な本です。)暗号化について、"the application of transformations to data in order to hide information (情報を隠すためにアプリケーションをデータに変換させること)"と述べました。この定義について少し考えて頂きたいので、代わりに次のものを示します。
uif bqqmjdbujpo pg usbotgpsnbujpot up ebub jo psefs up ijef jogpsnbujpo
これは、文字置換暗号(a character substitution cipher)という、暗号化で最も簡単な形式の例です。本来の文の一文字一文字を、アルファベットの並びでその文字の後にくる文字に置き換える方法です。ここで、「z」は、一回り回って「a」に置き換わります。次のような変換表を使って、手書きでかなり簡単にできる方法です。
For i = 1 To Len(ptext)
c = Lcase(Mid(ptext,i,1))
If c < "a" Or c > "z" Then
ctext = ctext & c
Else
n = Asc(c) - Asc("a")
c = Chr( ((n + keynum) Mod 26) + Asc("a") )
ctext = ctext & c
End If
Next i
Sub decipher(keynum As Integer, ctext As String, ptext As String)
Dim i As Integer
Dim c As String
Dim n As Integer
For i = 1 To Len(ctext)
c = Lcase(Mid(ctext,i,1))
If c < "a" Or c > "z" Then
ptext = ptext & c
Else
n = Asc(c) - Asc("a")
c = Chr( ( (26 + n - keynum) Mod 26) + Asc("a") )
ptext = ptext & c
End If
Next I
もし非対称的暗号化が存在しないのであれば、対称的暗号化について多くを語ることは意味のないことになります。実際に非対称的暗号化は存在するのです。非対称的暗号作成の背景にある基本原則は、「a」と「b」というような一組の数学的な関連付けをもったキーやパブリック・キーを作成するということです。しかし、たとえ一組のキー・アルゴリズムの関係を知っていたとしても、「b」を見いだすことは極めて難しいことです。ということは、簡単な非対称アルゴリズムでさえも、しばしば「one-way trap door function (一方通行のトラップ・ドア機能)」という、ある種の数学問題に基づいて考えていく必要があります。このような機能は、2つの素数のかけ算であり、積の合成関数の結果と同じようなものです。積の回数を多くするのと同様に、多くの因数を選べば、高速コンピューターが、それを元の2つの素数へ因数分解するのには、たいへん長い時間を要します。
ノーツでは、対称的暗号化は、シークレット・キー(秘密鍵)暗号として知られています。そして、ドミノデザイナーには、簡単に文書のフィールドを暗号化できるという特徴があります。ユーザーは、シークレット・キーを作成して、これらのキーに名前を付与することができます。アプリケーションは、SecretEncryptionKeys という特別なフィールドにある名前で、キーを参照しています。文書が保存されるとき、このフィールドで指定したキーが、ユーザー ID ファイルから取り出されます。そして、特別なプロパティーが付与された全フィールドは、それらのキーにより暗号化されます。
テンプレートのコピーに変更を加え始めるとき、次のようなメッセージが表示されます。「指定したデータベースまたはテンプレートは、ロータス ノーツ Mail のユーザーが使用できますが、このアクションはその権限を無効にします。操作を続行しますか。(This database has been authorized for use by Lotus Notes Mail Users. This action will invalidate the authorization. Are you sure that you would like to proceed?)」 メッセージは、起動した doclb50w.ntf テンプレートに、ロータスが適用した特別なライセンス・スタンプにより表示されています。[はい] をクリックして、安全に処理を続けることができます。
アプリケーションで使用される大部分の暗号化タイプは、シークレット・キーの暗号化が一般的になっているので、EncType フィールドに Default Value として、"S" を設定します。そして作成した表の右上セルに、フィールドの目的を説明する簡単なコメントを次のように入力します。「チェック・ボックスを確認して、どちらかの暗号化にチェック・マークを入れてください。シークレット・キー暗号化は、ユーザ ID ファイルに保存されているキーを使います。パブリック・キー暗号化は、ドミノ・ディレクトリー、あるいは、個人アドレス帳のユーザー文書に保存されているキーを使います。(Check one or both boxes to enable encryption. Secret key encryption uses keys stored in user id files. Public key encryption uses keys stored in person documents in the Domino Directory or your personal address book.)」
表の右下セルには、コメントを次のように入力れます。「ユーザー ID ファイルに保存されているキーの名前を入力します。これらのキーがないユーザーは、シークレット・キー暗号化が実行されている文書を読むことができません。(Enter the names of keys that are stored in user id files. Users who do not have these keys will not be able to read documents that are stored using secret key encryption.)」
これらの新しいサブフォームは、doblb50w.ntf テンプレートのフォームにすでにある小さいセクションと置き換わっています。したがって、カット・アンド・ペーストの操作から始めます。文書のフォームを開いて、「内容説明」ラベルと Body フィールドを含む2行を選びます。クリップボードにそれらを切り取ります。
そして、新しいサブフォームを作成し、クリップボードの内容をそこに貼り付けます。Body フィールドの下に、Default Value を "0" にして CryptoFlag という名前の、編集可能なテキスト・フィールドを作成します。ノーツまたはブラウザーで表示されないように、このフィールドの非表示タブで、段落非表示 の両方にチェック・マークを入れます。
「プレーン・テキスト Body | PainBody」という名前でこのサブフォームを保存します。
もうひとつ新しいサブフォームを作成し、クリップボードの同じ内容をそこに貼り付けます。このサブフォームの Body フィールドを選択し、このフィールドのプロパティー・ボックスを開きます。詳細タブのセキュリティー・オプションから 「このフィールドを暗号化する」を選択します。
Body フィールドの下に、「Select secret encryption keys(暗号化シークレット・キーの選択)」という名前でテキスト・フィールドによりラベルを作成します。その下に、「SecretEncryptionKeys」という名前のチェック・ボックス・フィールドを追加します。このフィールドのプロパティー・ボックスの制御タブにある選択セクションで、「式で選択肢を設定」を選び、選択の式を次のように入力します。
@GetProfileField("Crypto";"SecretKeyList")
サブフォームの一番最後に新しい行を追加します。そして、Default Value を "1" にして「CryptoFlag」という名前の、編集可能なテキスト・フィールドを作成します。ノーツまたはブラウザーで表示されないように、このフィールドの非表示タブで、段落非表示の両方にチェック・マークを入れます。
「シークレット暗号化 Body | SecretKeyBody」という名前でこのサブフォームを保存します。
同様の新しいサブフォームを作成するために、「シークレット暗号化 Body」のサブフォームのビューに戻り、ビュー全体を選び、それをコピーして新しいサブフォームに貼り付けます。(キーボードの操作で、Ctrl-C のキー操作をした後、Ctrl-V のキー操作を行うと、コピーと貼り付けが簡単に行えます)。そして次のようなメッセージが表示されます。「暗号化文書ライブラリー・テンプレートの元のデータベースは、「EncryptedR50DocLib」 という名前のテンプレートです。貼り付けた後、「EncryptedR50DocLib」のサブフォームが変更されたときこれらのサブフォームを自動的に更新しますか。(The source database 'Encrypted Doc Library Template' is a Design Template named 'EncryptedR5DocLib'. After being pasted, would you like these Subforms to be automatically updated when those in 'EncryptedR50DocLib' change?' )」。ここでは、[いいえ] をクリックし、同じテンプレートにサブフォームを貼り付けます。
新しくコピーで作成したサブフォームを開いて、サブフォームのプロパティー・ボックスをさらに開き、サブフォームの名前を「パブリック暗号化 Body | PublicKeyBody」に変更します。次に、SecretEncryptionKeys フィールドを選び、このフィールド・プロパティー・ボックスを開き、フィールドの名前を「PublicEncryptionKeys」に変えて、種類を名前に変えて、複数値も可のチェック・ボックスにチェックを入れます。
フィールドのプロパティー・ボックスの制御タブにある、選択セクションでアドレス帳から選択を選び、オプション・セクションでエントリー補助ボタンの表示にチェックを入れます。最後に、Default Value に次の行を追加します。
@Name([CN];@Username)
サブフォームへのこれらの変更を保存します。
ステップ5:フォームの更新
次に、新しいサブフォームを使用するために、テンプレートの既存フォームを更新する必要があります。文書のフォームを開いて、内容説明ラベルと Body フィールドの位置にカーソルを置きます。(もしその位置を忘れてしまった場合は、フォーム上のヘッダー・セクションの下に空白行が2行あるところが目印です。)メニューの [作成] - [サブフォームの挿入] をクリックし、サブフォームの挿入ダイアログ・ボックス上の、式の定義によりサブフォームを挿入 チェック・ボックスにチェックを入れ、[OK] をクリックします。計算結果(サブフォーム)の Default Value に、次のコードを入力します。
これらの同じオプションを、アプリケーションの別のフォームに入れるため、計算結果(サブフォーム)をクリップボードへコピーします。そして、「返答」のフォームと「返答への返答」のフォームを開きます。その各フォームから内容説明ラベルと Body フィールドを削除し、代わりにクリップボードの計算結果(サブフォーム)を挿入し、そして上記のコードも貼り付けます。
シークレット・キー暗号化を行うとき、最初にすることは、アプリケーションで使いたいキーを作成することです。キーは、ノーツ ID ファイルに保存されます。
ノーツ・クライアントで、[ファイル] - [ツール] - [ユーザ ID] を選択すると、ユーザ ID ダイアログ・ボックスが表示されます。このダイアログ・ボックスで、暗号化アイコンをクリックして、次に新規ボタンをクリックします。「暗号キーの作成」ダイアログ・ボックスが表示されます。ここで、暗号キーの名前 として、例えば、「My Personal Key」といった名前を入力します。アプリケーションに応じて複数のキーを使いたい場合は、再び新規ボタンをクリックし、暗号キーの名前に「My Workgroup Key」という名前を入力して、2つ目のキーを作成します。
個人利用のために、データを非公開にしておく場合は、他の人に公開しないキーを使います。そのキーを用いそして、誰にも知られていないパスワードで ID ファイルを安全に保てば、サーバー管理者がそのデータを読んでいるかどうかを心配せずに、サーバー上に個人情報を保存しておくことができます。
データをある一部の人と共有したい場合は、その人たちに、アプリケーション・データを共有するために必要なシークレット・キーを公開するかどうかは、個人の意志次第です。他の人にキーを公開するかどうかにかかわらず、新しいキーを作成するときはいつも、ID ファイルのバックアップを安全な場所に必ずとっておくことが大切です。もしキーのすべてのコピーが失われれば、そのキーで暗号化されたすべてのデータは、読めなくなります。関係者以外に知られていないパスワードで ID ファイルを安全に保つこともまた、キーを公開した人を含めキーを知っている全ての人にとって、とても重要なことです。
ユーザー ID ダイアログ・ボックスの「暗号化」には、暗号キーの「メール」と「書き出し」という2つの公開オプションがあります。より簡単な公開方法は、「メール」です。キーをメールで送信するとき、ノーツ・クライアントは、自動的にパブリック・キー暗号化を行い、シークレット・キーを保護します。そして、メール受信者はクリック1つで、メール受信者の ID ファイルにキーが追加されます。かわりに「書き出し」の方法を使う場合は、フロッピー・ディスクにキー・ファイルをコピーして、公開したい人にそのフロッピー・ディスクを手渡しします。そしてそのフロッピー・ディスクを受け取った人は、ユーザー ID ダイアログ・ボックスの、「暗号化」の「呼び出し」ボタンをクリックして、コンピューターに取り込みます。
手動で「書き出し」と「呼び出し」ボタンをクリックして、キーの受け渡しを行う理由は2つあります。第一に、ノーツ・メールのユーザーだけが、電子メールを介してキーを受け取ることができます。しかし、何人かのユーザーは、ノーツ・メールを使っていないことがあります。第二に、システム管理者が、個人の ID やパスワードにアクセスできないように制限しているにもかかわらず、シークレット・キーと同じくらい取り扱いを慎重にすべきものに対して、メール・システムに十分信頼がおけないと心配する場合です。
パブリック・キー暗号化の最大の利点の1つは、ユーザー ID ファイルが作成される時に、すべてのノーツ・ユーザーへ自動的に、パブリック・キーが送信されるということです。通常は、新しいファイルが作られることはありません。したがって、ユーザーにシークレット・キーを自動送信することは、議論の余地があります。
パブリック・キー暗号化を選べば、本人の名前が登録された名前選択フィールドが表示されます。ドミノ・ディレクトリー、あるいは個人アドレス帳から名前を選びたい場合、フィールドの隣りの補助ボタンから、標準のノーツのアドレス帳ダイアログ・ボックスが起動できます。このフィールドに他のユーザーの名前を追加します。文書が保存される際に、これらのユーザーのパブリック・キーが、文書の Body フィールドを暗号化するために使われます。
もし文書に適切なシークレット・キーを適用しているか、あるいは、ユーザーの名前が文書に記載されていれば、編集を行うために、保存済みの文書を開いたり、新しいキー、新しい名前、または追加したキー、追加した名前を選んで、文書を再び保存できます。文書が保存されるとき、ノーツは自動的に Body フィールドを再び暗号化します。
残念なことに、フィールド暗号化は、Web アプリケーションでは実行できません。暗号化サポートは、ノーツ・クライアントの機能です。シークレット・キーは、ノーツ ID ファイルに保存されています。パブリック・キーは、ドミノ・ディレクトリーに保存されています。しかし、パブリック・キーにより暗号化されたデータを復号化するためのプライベート・キーも、ノーツ ID ファイルに保存されます。ブラウザーには、この組み込みサポートがありません。そして、ブラウザーのユーザーには、ノーツ ID ファイルがありません。
暗号化について覚えておいて頂きたいことが、2、3あります。まず第一に、故意であれ、どのような目的であれ、ドミノの暗号化は破られることがありません。そのことは、良い点と悪い点の両面あります。ID ファイルに正当なキーがない限り、誰もデータを読むことができません。しかし、それはまた、もしキーを失えば、誰もデータを読むことができないということになります。ID ファイルに新しいシークレット・キーを追加する時はいつでも、必ず ID ファイルのバックアップを取るようにしてください。