4D v16.3ENCRYPT BLOB |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
ENCRYPT BLOB
|
ENCRYPT BLOB ( toEncrypt ; sendPrivKey {; recipPubKey} ) | ||||||||
引数 | 型 | 説明 | ||||||
toEncrypt | BLOB |
![]() |
暗号化するデータ | |||||
![]() |
暗号化されたデータ | |||||||
sendPrivKey | BLOB |
![]() |
送信者の秘密鍵 | |||||
recipPubKey | BLOB |
![]() |
受信者の公開鍵 | |||||
ENCRYPT BLOBコマンドは、toEncrypt BLOBの内容を送信者の秘密鍵sendPrivKeyを使用して暗号化します。オプションとして、同時に受信者の公開鍵recipPubKeyも使用できます。これらの鍵は、GENERATE ENCRYPTION KEYPAIR(セキュアプロトコルテーマ)を使用して生成します。
Note: このコマンドは、SSLプロトコルアルゴリズムおよび暗号化機能を利用します。したがって、このコマンドを使用するためには、4D Webサーバ通信にSSLを使用しない場合でも、SSLプロトコルに必要となる各コンポーネントがマシン上に正しくインストールされているか確認してください。このプロトコルについての詳細は、の節を参照してください。
鍵を納めるBLOBは、PKCS内部フォーマットです。クロスプラットフォームであるこの形式では、電子メールやテキストファイルにコピー&ペーストすることにより簡単に鍵のやり取りや処理を行うことができます。
コマンドを実行すると、BLOB toEncryptには暗号化されたデータが納められます。このデータの解読は、引数として渡された送信者の公開鍵を使用した上でDECRYPT BLOBコマンドによってのみ行えます。さらに、情報の暗号化の際にオプションである受信者の公開鍵を使用すると、解読には受信者の秘密鍵も必要になります。
“Alice”と“Bob”の間で行われるメッセージ交換のための、公開及び秘密鍵を使用した暗号化の原則
Note: BLOB内容の変更(意図的かどうかに関わらず)を防ぐため、暗号にはチェックサム機能が含まれています。したがって、暗号化されたBLOBは変更しないでください。変更を行うと、解読できなくなるおそれがあります。
データの暗号化を行うと、アプリケーションの実行速度が低下し、2つの鍵を使用した場合は特に遅くなります。しかし、以下の最適化に関するヒントを考慮してみることをお勧めします:
一つのキーを使用する
会社で、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)
`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
`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 つです:
- 受信だけがメッセージを読むことができます。
- 受信側は、メッセージの送信が送信者自身によって行われたという証拠を取得しなければなりません。
1) 本社および各子会社では、それぞれ独自の鍵のペアを生成します(GENERATE_KEYS_TXTGENERATE_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
`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
プロダクト: 4D
テーマ: BLOB
番号:
689
初出: 4D v6.7
Encryption, Public Key, Private key, PKCS, Optimization
ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)