4Dアルゴリズムで自分のデータを暗号化する

Deeplからの自動翻訳

少し前にお気づきかもしれませんが、4Dは あなたのデータを暗号化する簡単な方法を提供します。さて、4Dでは、データの暗号化に使用されるものと同じアルゴリズムを使用することもできます。そのため、テーブルの1つのフィールドや外部ファイルなど、あらゆる情報を暗号化および復号化することができるようになりました。

:このブログ記事で紹介する新しいコマンドを説明するために、偽の医療分析とその外部PDFレポートを含む HDIを紹介します。このHDIでは、レポートが暗号化されており、それを解読して読み取り可能なドキュメントを取得します。

より強くなる

昨今、ハッキングやデータ漏洩を防ぐために、重要なデータを暗号化する必要が増えています。4Dは、テーブルを簡単に暗号化できるようにすることで、この主なニーズに既に応えています。しかし、時には、テーブルのフィールドだけを暗号化したり、レポート、請求書、医療分析など、レコードにリンクした外部ファイルを暗号化する必要がある場合があります。このような場合、4D.CryptoKeyクラスを使用することで既に可能ですが、非対称アルゴリズムは、情報署名の目的により適合しています。4Dがデータやジャーナルの暗号化に使用しているのと同じ、強力なAES-256対称型アルゴリズムで、あなた自身のデータやファイルを暗号化する機能を提供することができるようになりました。

カーテンの裏側

新しい Encrypt data BLOBコマンドは、BLOBを取得し、 キーパスオブジェクトと ソルトというパラメータを使用して、暗号化されたBLOBを計算します。

キーパスオブジェクトとは、コマンドを呼び出した結果のオブジェクトです。 New data keyコマンドを呼び出した結果のオブジェクトです。キーパスオブジェクトの代わりに、パスフレーズを直接使用することもできます。4Dは暗号化にAESタイプのアルゴリズムを使用するため、結果のBLOBは16バイトの倍数のサイズになります。そのため、元のblobのサイズが16の倍数でない場合、コマンドは端末のヌルバイトを追加して補完します。

逆の操作では、新しい Decrypt data BLOBコマンドは、暗号化されたBLOBを取得し、同じパラメータを使用して復号化されたBLOBを計算します。ただし、パラメータが暗号化時に使用したものとまったく同じ値でない場合、復号化されたBLOBは元のBLOBと同じにはなりませんので注意してください。実際、これは暗号化で予想される動作です。

ソルトはそれほど悪いものではない

ソルトを使うのは、暗号化されたデータから元のデータを取り出せないようにするための方法です。データをハッキングする方法のひとつに、周波数分析、つまり暗号化された情報と非常によく似た元の情報とを比較する方法があります。同じ情報を同じパスフレーズで、異なるソルトで暗号化すると、フィンガープリント(暗号化された情報)は全く異なるものになります。

ソルトは、その値が複数あるため、より関連性が高くなります。例えば、あるレコードにリンクされたフィールドやファイルを暗号化する場合、主キーをソルトとして使用するのが簡単です。こうすれば、元のフィールドやファイルの内容が複数のレコードで同じであっても、暗号化された内容は全く別のものになる。

ファイル暗号化サンプル

オリジナルサイズの復元を伴うファイル暗号化・復号化を簡単に扱うには、以下の方法があります。

これらの方法は、暗号化されたファイル自体に元のファイルサイズを格納し、復号化の際に簡単に取得できるようにすることで、16バイトの補完を管理します。

//encryptFile
#DECLARE
var ($originalFile : 4D .File;$passPhrase : Text ;$salt : Integer ;$encryptedFile : 4D .File)->$result : Boolean // AES-type encryption : as resulting blob size is a multiple of 16 bytes, some final null bytes may be added.
$fileContent ;$blobToEncrypt;$blobEncrypted : Blob
var $contentLength ;$offset : Integer

$fileContent:=$originalFile.getContentCOPY BLOB
()
// Store original file length at the beginning of the blob to encrypt
$contentLength :=BLOB size($fileContent)
VARIABLE TO BLOB ($contentLength;$blobToEncrypt;$offset)
($fileContent;$blobToEncrypt; 0;$offset;$contentLength)$result:=Encrypt data BLOB($blobToEncrypt;$passPhrase;$salt;$blobEncrypted)
If ($result)
$encryptedFile .setContent($blobEncrypted)
End if

//decryptFile
#DECLARE :// AES-type decryption : as encrypted blob size is a multiple of 16 bytes, some final null bytes may have been added. $fileContent($encryptedFile : 4D .File;$passPhrase : Text ;$salt : Integer ;$decryptedFile 4D File )->$result:Boolean

var $blobToDecrypt ;$blobDecrypted : Blob
var $contentLength ;$offset : Integer
$blobToDecrypt :=$encryptedFile.getContent // Retrieve original file length at the beginning of the decrypted blob
()
$result :=Decrypt data BLOB($blobToDecrypt;$passPhrase;$salt;$blobDecrypted)
If ($result)

BLOB TO VARIABLE ($blobDecrypted;$contentLength;$offset)COPY BLOB($blobDecrypted;$fileContent;$offset; 0 ;$contentLength
$decryptedFile .setContent($fileContent)
End if

使用例

これらの新しいコマンドの使い方を説明するために、いくつかの偽の医療分析とその外部PDFレポートを含むHDIを紹介します。このHDIでは、レポートは暗号化されており、あなたはそれを解読して読み取り可能なドキュメントを取得します。

HDI: BLOB暗号化

4Dと同じようにデータを暗号化し、復号化することができます。

Avatar
- プロダクトオーナー - Damien Fuzeauは、2019年2月に4D Productチームに参加しました。プロダクトオーナーとして、ユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換することを担当しています。また、実装された機能が顧客のニーズを満たしているかどうかを確認することも彼の役割です。ナント大学のソフトウェア工学科を卒業。前職の会社では最初は開発者として(1997年に4Dを発見)、後にエンジニアリングマネージャーとソフトウェアアーキテクトとして、23年以上勤務しました。この会社は、4DのOEMパートナーであり、現在は数千のユーザーと数百のサーバーに向けて4Dベースのビジネスソフトを展開しています。ですから、Damienは、多言語環境での4D開発・導入に慣れています。