ENCRYPT BLOB

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 6.7


ENCRYPT BLOB (toEncrypt; sendPrivKey{; recipPubKey})

引数説明
toEncryptBLOB暗号化するデータ
暗号化されたデータ
sendPrivKeyBLOB送信者の秘密鍵
recipPubKeyBLOB受信者の公開鍵

説明

ENCRYPT BLOBコマンドは、toEncrypt BLOBの内容を送信者の秘密鍵sendPrivKeyを使用して暗号化します。オプションとして、同時に受信者の公開鍵recipPubKeyも使用できます。これらの鍵は、GENERATE ENCRYPTION KEYPAIR(セキュアプロトコルテーマ)を使用して生成します。

Note: このコマンドは、SSLプロトコルアルゴリズムおよび暗号化機能を利用します。したがって、このコマンドを使用するためには、4D Webサーバ通信にSSLを使用しない場合でも、SSLプロトコルに必要となる各コンポーネントがマシン上に正しくインストールされているか確認してください。このプロトコルについての詳細は、Webサービス, SSLプロトコルの利用の節を参照してください。

・送信者の秘密鍵のみを暗号化に使用されると、公開鍵の所有者だけがこの情報を読み取れます。このシステムにより、送信者自身が情報の暗号化を行ったということが保証されます。

・送信者の秘密鍵と受信者の公開鍵を同時に使用することにより、情報の読み取りを行えるのは1人の受信者だけであることが保証されます。

鍵を納めるBLOBは、PKCS内部フォーマットです。クロスプラットフォームであるこの形式では、電子メールやテキストファイルにコピー&ペーストすることにより簡単に鍵のやり取りや処理を行うことができます。

コマンドを実行すると、BLOB toEncryptには暗号化されたデータが納められます。このデータの解読は、引数として渡された送信者の公開鍵を使用した上でDECRYPT BLOBコマンドによってのみ行えます。さらに、情報の暗号化の際にオプションである受信者の公開鍵を使用すると、解読には受信者の秘密鍵も必要になります。

“Alice”と“Bob”の間で行われるメッセージ交換のための、公開及び秘密鍵を使用した暗号化の原則:

Note: BLOB内容の変更(意図的かどうかに関わらず)を防ぐため、暗号にはチェックサム機能が含まれています。したがって、暗号化されたBLOBは変更しないでください。変更を行うと、解読できなくなるおそれがあります。

暗号化コマンドの最適化

データの暗号化を行うと、アプリケーションの実行速度が低下し、2 つの鍵を使用した場合は特に遅くなります。しかし、以下の最適化に関するヒントを考慮してみることをお勧めします:

・現時点で使用可能なメモリに応じて、コマンドは“同期”モードまたは“非同期”モードで実行されます。

非同期モードでは他のプロセスを中断しないので、より高速になります。使用可能なメモリが、暗号化するデータの少なくとも2倍ある場合、このモードが自動的に使用されます。

メモリがそれ以下の場合、セキュリティ上の理由から、同期モードが使用されます。このモードでは他のプロセスを中断するため、速度はより低下します。

・BLOBのサイズが大きい場合、BLOBの重要な小さな部分のみを暗号化して、処理しなければならないデータ量や時間を減らすことができます。

例題

単一の鍵を使用

ある会社が、4Dデータベースに保存されたデータを機密にしておきたいとします。これらの情報は定期的に、ファイルに納めてインターネット経由で子会社へ送信する必要があります。

1. 会社では、GENERATE ENCRYPTION KEYPAIRコマンドを使用して一組の鍵を生成します:

      `Method GENERATE_KEYS_TXT
   C_BLOB($BPublicKey; $BPrivateKey)
   GENERATE ENCRYPTION KEYPAIR($BPrivateKey; $BPublicKey)
   BLOB TO DOCUMENT("PublicKey.txt"; $BPublicKey)
   BLOB TO DOCUMENT("PrivateKey.txt"; $BPrivateKey)

2. 会社側は秘密鍵を保存し、各子会社へは公開鍵を含むドキュメントのコピーを送信します。最高のセキュリティを維持するため、鍵は子会社に手渡すディスクにコピーしてください。

3. 次に、機密情報(例えば、テキストフィールドに保存したもの)をBLOBにコピーします。この情報は、秘密鍵を使用して暗号化されます:

      `Method ENCRYPT_INFO
   C_BLOB($vbEncrypted;$vbPrivateKey)
   C_TEXT($vtEncrypted)

   $vtEncrypted:=[Private]Info
   VARIABLE TO BLOB ($vtEncrypted;$vbEncrypted)
   DOCUMENT TO BLOB("PrivateKey.txt"; $vbPrivateKey)
   If(OK=1)
      ENCRYPT BLOB ($vbEncrypted; $vbPrivateKey)
      BLOB TO DOCUMENT ("Update.txt";$vbEncrypted)
   End if

4. 更新用ファイルは、インターネットのような非暗号化チャネルで子会社に送ることができます。万一、第三者がこの暗号化されたファイルを入手した場合でも、公開鍵なしではファイルを解読できません。

5. 各子会社では、公開鍵を使用してドキュメントの解読が可能です:

      `Method DECRYPT_INFO
   C_BLOB($vbEncrypted;$vbPublicKey)
   C_TEXT($vtDecrytped)
   C_TIME ($vtDocRef)

   ALERT ("Please select an encrypted document.")
   $vtDocRef:=Open document("") `Select Update.txt
   If (OK=1)
      CLOSE DOCUMENT($vtDocRef)
      DOCUMENT TO BLOB(Document;$vbEncrypted)
      DOCUMENT TO BLOB("PublicKey.txt"; $vbPublicKey)
      If (OK=1)
         DECRYPT BLOB ($vbEncrypted; $vbPublicKey)
         BLOB TO VARIABLE($vbEncrypted; $vtDecrypted)
         CREATE RECORD ([Private])
         [Private]Info:=$vtDecrypted
         SAVE RECORD([Private])
      End if
   End if

2つの鍵を使用

ある会社が情報のやり取りにインターネットを利用したいものとします。各子会社では、機密情報を受信し、また本社へ情報の送信も行います。したがって、要件は次の2 つです:

- 受信側は、メッセージの読み取りだけが可能です。

- 受信側は、メッセージの送信が送信者自身によって行われたという証拠を取得しなければなりません。

1. 本社および各子会社では、それぞれ独自の鍵のペアを生成します(GENERATE_KEYS_TXTメソッドを使用)。

2. 秘密鍵は双方で秘密にしておきます。各子会社は、自分の公開鍵を本社へ送り、本社もまた独自の公開鍵を送信します。公開鍵ではメッセージを解読するのに十分ではないため、この鍵の転送に暗号化のチャネルを使用する必要はありません。

3. 送信する情報を暗号化するため、子会社や本社ではENCRYPT_INFO_2メソッドを実行します。このメソッドは、送信側の秘密鍵と受信側の公開鍵を使用して情報の暗号化を行います:

      `Method ENCRYPT_INFO_2
   C_BLOB($vbEncrypted;$vbPrivateKey;$vbPublicKey)
   C_TEXT($vtEncrypt)
   C_TIME ($vtDocRef)

   $vtEncrypt:= [Private]Info
   VARIABLE TO BLOB ($vtEncrypt;$vbEncrypted)
      ` Your own private key is loaded...
   DOCUMENT TO BLOB("PrivateKey.txt"; $vbPrivateKey)
   If (OK=1)
         ` ...and the recipient’s public key
      ALERT ("Please select the recipient’s public key.")
      $vhDocRef:=Open document("") `Public key to load
      If (OK=1)
         CLOSE DOCUMENT($vtDocRef)
         DOCUMENT TO BLOB(Document;$vbPublicKey)
            `BLOB encryption with the two keys as parameters
         ENCRYPT BLOB ($vbEncrypted; $vbPrivateKey; $vbPublicKey)
         BLOB TO DOCUMENT ("Update.txt";$vbEncrypted)
      End if
   End if

4. 暗号化したファイルが、インターネット経由で受信側に送信されます。万が一第三者がこのファイルを入手した場合、たとえ公開鍵を持っていたとしても、受信側の秘密鍵も必要となるため、メッセージを解読できません。

5. 受信側はそれぞれ、独自の秘密鍵と送信側の公開鍵を使用してドキュメントの解読が可能です:

      `Method DECRYPT_INFO_2
   C_BLOB($vbEncrypted;$vbPublicKey;$vbPrivateKey)
   C_TEXT($vtDecrypted)
   C_TIME ($vhDocRef)

   ALERT ("Please select the encrypted document.")
   $vhDocRef:=Open document("") `Select the Update.txt file
   If (OK=1)
      CLOSE DOCUMENT($vhDocRef)
      DOCUMENT TO BLOB(Document;$vbEncrypted)
         `Your own private key is loaded
      DOCUMENT TO BLOB("PrivateKey.txt"; $vbPrivateKey)
      If (OK=1)
            ` ...and the sender’s public key
         ALERT ("Please select the sender’s public key.")
         $vhDocRef:=Open document("") `Public key to load
         If (OK=1)
            CLOSE DOCUMENT($vhDocRef)
            DOCUMENT TO BLOB(Document;$vbPublicKey)
               `Decrypting the BLOB with two keys as parameters
            DECRYPT BLOB ($vbEncrypted; $vbPublicKey;$vbPrivateKey)
            BLOB TO VARIABLE($vbEncrypted; $vtDecrypted)
            CREATE RECORD ([Private])
            [Private]Info:=$vtDecrypted
            SAVE RECORD([Private])
         End if
      End if
   End if

参照

DECRYPT BLOB, GENERATE ENCRYPTION KEYPAIR.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次