Halite は、基盤となるすべての暗号化操作を libsodium に依存する高レベルの暗号化インターフェイスです。
Halite は、エコシステムを改善し、PHP の暗号化をより安全で実装しやすくするための継続的な努力の結果として、Paragon Initiative Enterprises によって作成されました。
Halite のドキュメントはオンラインで読むことができます。
Halite は Mozilla Public License 2.0 に基づいてリリースされています。 MPL の条件に基づいて派生作品を利用可能にせずに Halite を拡張したい場合は、Paragon Initiative Enterprises から商用ライセンスを入手できます。
バックエンド Web アプリケーション用の MPL ソフトウェアの条件には満足しているが、Halite を使用するアプリケーションのサポート契約を購入したい場合は、Paragon Initiative Enterprises からもサポート契約が提供されます。
重要: Halite の以前のバージョンは、GNU Public License バージョン 3 (GPLv3) に基づいて利用可能でした。 Mozilla パブリック ライセンス条項に基づいて利用できるのは、Halite 4.0.1 以降のみです。
Halite を使用する前に、プロジェクトの要件に合ったバージョンを選択する必要があります。 Halite の利用可能なバージョンの要件間の違いを以下に簡単に説明します。
PHP | リブナトリウム | PECL リブナトリウム | サポート | |
---|---|---|---|---|
Halite 5.1 以降 | 8.1.0 | 1.0.18 | 該当なし (標準) | アクティブ |
岩塩 5.0.x | 8.0.0 | 1.0.18 | 該当なし (標準) | アクティブ |
岩塩 4.1+ | 7.2.0 | 1.0.15 | 該当なし (標準) | サポートされていません |
岩塩 4.0 | 7.2.0 | 1.0.13 | 該当なし (標準) | サポートされていません |
岩塩3 | 7.0.0 | 1.0.9 | 1.0.6 / 2.0.4 | サポートされていません |
岩塩2 | 7.0.0 | 1.0.9 | 1.0.6 | サポートされていません |
岩塩1 | 5.6.0 | 1.0.6 | 1.0.2 | サポートされていません |
注: Halite 5.0.x は PHP 8.0 上で動作しますが、パフォーマンスは PHP 8.1 よりも劣ります。
5.1 より前のバージョンの Halite が必要な場合は、その特定のブランチに関連するドキュメントを参照してください。
Halite をインストールするには、まず libsodium をインストールする必要があります。 PHP 拡張機能が必要な場合もあれば、必要ない場合もあります。ほとんどの人にとって、これは走ることを意味します...
sudo apt-get install php7.2-sodium
...または、オペレーティング システムと PHP バージョンに応じた同等のコマンド。
行き詰まった場合は、@aolko が提供したこのステップバイステップ ガイドが役立つかもしれません。
前提条件をインストールしたら、Composer を通じて Halite をインストールします。
composer require paragonie/halite:^5
Halite の無料 (無償) サポートは、最新のメジャー バージョン (現在 5) までのみ適用されます。
会社で古いバージョンの Halite のサポートが必要な場合は、Paragon Initiative Enterprises に連絡して商用サポート オプションについて問い合わせてください。
Halite の古いバージョンから簡単に移行する方法が必要な場合は、halite-legacy を確認してください。
ドキュメントを確認してください。基本的な Halite API はシンプルになるように設計されています。
SymmetricCrypto::encrypt
( HiddenString
, EncryptionKey
): string
SymmetricCrypto::encryptWithAD
( HiddenString
, EncryptionKey
, string
): string
SymmetricCrypto::decrypt
( string
, EncryptionKey
): HiddenString
SymmetricCrypto::decryptWithAD
( string
, EncryptionKey
, string
): HiddenString
AsymmetricCrypto::seal
( HiddenString
、 EncryptionPublicKey
): string
AsymmetricCrypto::unseal
( string
, EncryptionSecretKey
): HiddenString
AsymmetricCrypto::encrypt
( HiddenString
、 EncryptionSecretKey
、 EncryptionPublicKey
): string
AsymmetricCrypto::encryptWithAD
( HiddenString
, EncryptionSecretKey
, EncryptionPublicKey
, string
): string
AsymmetricCrypto::decrypt
( string
, EncryptionSecretKey
, EncryptionPublicKey
): HiddenString
AsymmetricCrypto::decryptWithAD
( string
, EncryptionSecretKey
, EncryptionPublicKey
, string
): HiddenString
SymmetricCrypto::authenticate
( string
, AuthenticationKey
): string
SymmetricCrypto::verify
( string
, AuthenticationKey
, string
): bool
AsymmetricCrypto::sign
( string
, SignatureSecretKey
): string
AsymmetricCrypto::verify
( string
, SignaturePublicKey
, string
): bool
まず、キーを 1 回だけ生成して永続化します。
<?php
use ParagonIE Halite KeyFactory ;
$ encKey = KeyFactory:: generateEncryptionKey ();
KeyFactory:: save ( $ encKey , ' /path/outside/webroot/encryption.key ' );
そして、次のようにメッセージを暗号化/復号化できます。
<?php
use ParagonIE Halite KeyFactory ;
use ParagonIE Halite Symmetric Crypto as Symmetric ;
use ParagonIE HiddenString HiddenString ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
$ message = new HiddenString ( ' This is a confidential message for your eyes only. ' );
$ ciphertext = Symmetric:: encrypt ( $ message , $ encryptionKey );
$ decrypted = Symmetric:: decrypt ( $ ciphertext , $ encryptionKey );
var_dump ( $ decrypted -> getString () === $ message -> getString ()); // bool(true)
これにより、次のようなものが生成されるはずです。
MUIDAEpQznohvNlQ-ZRk-ZZ59Mmox75D_FgAIrXY2cUfStoeL-GIeAe0m-uaeURQdPsVmc5XxRw3-2x5ZAsZH_es37qqFuLFjUI-XK9uG0s30YTsorWfpHdbnqzhRuUOI09c-cKrfMQkNBNm0dDDwZazjTC48zWikRHSHXg8NXerVDebzng1aufc_S-osI_zQuLbZDODujEnpbPZhMMcm4-SWuyVXcBPdGZolJyT
重要: Halite は文字列ではなく
Key
オブジェクトで動作します。
キー オブジェクトをecho
ようとすると、その内容ではなく空の文字列が取得されます。キー オブジェクトをvar_dump()
しようとすると、そのキーのタイプに関する事実が得られるだけです。
キーの生のバイナリ内容を検査したい場合は、 $obj->getRawKeyMaterial()
明示的に呼び出す必要があります。これは、ほとんどの使用例では推奨されません。
<?php
use ParagonIE Halite KeyFactory ;
use ParagonIE HiddenString HiddenString ;
$ passwd = new HiddenString ( ' correct horse battery staple ' );
// Use random_bytes(16); to generate the salt:
$ salt = "xddx7bx1ex38x75x9fx72x86x0axe9xc8x58xf6x16x0dx3b" ;
$ encryptionKey = KeyFactory:: deriveEncryptionKey ( $ passwd , $ salt );
パスワードから派生したキーは、ランダムに生成されたキーの代わりに使用できます。
Halite には、ストリーミング API を利用して、利用可能なメモリが非常に少ない (つまり 8 MB 未満) メモリを備えたシステム上で大きなファイル (ギガバイトなど) を暗号化できるファイル暗号化クラスが含まれています。
<?php
use ParagonIE Halite File ;
use ParagonIE Halite KeyFactory ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
File:: encrypt ( ' input.txt ' , ' output.txt ' , $ encryptionKey );
PHP 致命的エラー: Uncaught SodiumException: PHP からメモリを安全に消去できないため、これは実装されていません
これを解決するには、libsodium がインストール/有効化されていることを確認します。詳細については、この README の上記を参照してください。
あなたの会社が製品またはサービスでこのライブラリを使用している場合は、Paragon Initiative Enterprises からサポート契約を購入することに興味があるかもしれません。