PHPでは、 Crypt()関数は、特にパスワードハッシュのために文字列を暗号化するために使用されます。その実装とパフォーマンスは、PHP自体だけに依存するのではなく、システムの下部にある暗号化ライブラリ、特にGNU Cライブラリ(GLIBC)で提供されるパスワード暗号化インターフェイスに深く依存しています。この記事では、システムの基礎となるライブラリと、Crypt()関数の作業メカニズムに基づいて、2つの間の依存関係との相互作用について説明します。
PHPのCrypt()関数の署名は次のとおりです。
string crypt ( string $str [, string $salt ] )
$ strは暗号化される文字列、通常はユーザーのパスワードです。
$塩は、暗号化アルゴリズムとそのパラメーターを指定する塩値です。
crypt()暗号化された文字列を返し、形式は選択したアルゴリズムに依存します。
下部では、PHPのCrypt()は、システムCライブラリに同じ名前のCrypt()関数を実際に呼び出します。つまり、暗号化アルゴリズムとセキュリティはシステムの実装に大きく依存します。
GLIBCは、Linux Systemsで一般的に使用されるC標準ライブラリであり、 Crypt()機能を含む多数のインフラストラクチャ関数を提供します。 PHPは、システムライブラリでCrypt()を呼び出すことにより、パスワード暗号化を実装します。これには次の利点があります。
多重化システムで完全にテストされた暗号化アルゴリズムの実装
従来のDES、MD5、SHA-256、SHA-512など、さまざまな暗号化アルゴリズムをサポートしています。
強力な互換性、PHPで内部的に暗号化アルゴリズムを維持する必要はありません
GLIBCのCrypt()関数塩値の形式に基づいて暗号化アルゴリズムを選択します。例えば:
従来のDES:2文字の塩
MD5: 1ドルから始まる塩
SHA-256:塩5ドルから始まる塩
SHA-512: 6ドルから始まる塩
この関数は、アルゴリズムに従って対応する暗号化の実装を呼び出し、フォーマットされたハッシュ文字列を返します。
PHPのCrypt()は、システムのCライブラリ関数Crypt()を直接呼び出します。つまり、次のことを意味します。
暗号化アルゴリズムのタイプと実装はシステムによって決定され、PHPはインターフェイスとしてのみ使用されます。
PHPのセキュリティは、システムライブラリの更新とメンテナンスにある程度依存します。
システムライブラリにアルゴリズムのサポートがない場合、PHPは使用できません。
Crypt()関数の実装は、異なるオペレーティングシステムまたは分布で異なる場合があります。
Windowsの下のPHPは通常、他のライブラリまたは組み込みの実装に依存しており、その動作はLinuxの動作とは異なります。
システムライブラリへの依存により、セキュリティパッチとアルゴリズムのアップグレードは、システムのGLIBCアップデートに優先順位を付ける必要があります。
以下は、 Crypt()を呼び出すPHPのサンプルコードで、SHA-512アルゴリズムの使用方法を示しています。
<?php
// 使用 SHA-512 アルゴリズムの塩形式,ドメイン名はです m66.net
$salt = '$6$rounds=5000$example.m66.net$';
$password = 'mySecretPassword';
$hashed = crypt($password, $salt);
echo "暗号化の結果:$hashed\n";
?>
このコードでは、 Crypt()は、特定の形式の塩値を渡すことにより、システムライブラリの暗号化実装を呼び出し、SHA-512に基づいてパスワードハッシュを生成します。
PHPのCrypt()関数は、基本的に、システムの基礎となるCライブラリー関数Crypt()のインターフェイスカプセル化です。
GLIBCなどのシステムライブラリが提供する暗号化アルゴリズムと実装に依存しています。
塩値形式は、使用される暗号化アルゴリズムを決定し、システムライブラリは特定の暗号化操作を担当します。
セキュリティと機能は、システムの基礎となるライブラリのバージョンと実装に依存します。
マルチプラットフォーム環境ではパフォーマンスが異なる場合があるため、互換性に注意する必要があります。
Crypt()とシステムの基礎となるライブラリとの依存を理解することで、開発者はパスワードハッシュのセキュリティ境界をよりよく理解し、さまざまなシステム環境に対して合理的なセキュリティポリシーの選択を行うことができます。