2017-07-18 8 views
1

私はキーのコンポーネントをdefuse/php-encryptionと使用して、バウチャーコードとして使用される安全な鍵を生成しています。 キーには、生成されたキーをASCII文字列として出力する機能があります。私のユースケースの唯一の問題は、かなり長いことです。デフ/ php暗号化生成キーの長さを確実に短くする

鍵の長さを短くして衝突を回避し、キーにランダム性があることを確認して有効な鍵を推測できないようにする安全な方法はありますか?

私は16文字のキーのようなもので終わるのを見ています。

+0

実際の問題は、バウチャーコードを表す一意の文字列を取得する方法です。 –

+0

この特定の使用例では、yesです。しかし、私はこの一般的なものを作る方法を知りたいと思っています。例えば、次の時にセキュリティで保護された20文字の文字列を作ります。defuse/php-encryptionはうまく構築されているようです。しかし、生成された鍵の長さを選択できないのは少し悲しいことです。 (または私が何かを逃した) – inquam

+0

彼らは彼らのコードを得た。あなたがしているのは、暗号化された乱数生成器 'random_bytes'です(私はPHP 7がそのコアで機能すると思います)。任意の長さのランダムなバイトを取得したら、それをデータベースに挿入します。その値を 'unique'にして、挿入が失敗した場合(重複のため)、再度ランダム化して、再度挿入し直してください。ランダムな文字に暗号ツールを使用しないでください。 –

答えて

0

鍵の長さを減らし、衝突を回避し、鍵がランダムであることを確認して有効な鍵を推測できないようにする安全な方法はありますか?

理論的には、はい。 Since the data is hex-encoded、安全な長さの減少は(constant-time base64url encodingを使用して)次のようになります

<?php 
use ParagonIE\ConstantTime\Base64UrlSafe; 
use ParagonIE\ConstantTime\Hex; 

/** @var Defuse\Crypto\Key $key */ 

// To save a shorter key: 
$saved = $key->saveToAsciiSafeString(); 
$shortened = Base64UrlSafe::encode(
    Hex::decode($saved) 
); 
var_dump($shortened); 

// To restore the key: 
$lengthened = Hex::encode(
    Base64UrlSafe::decode($shortened) 
); 
$restoredKey = Key::loadFromAsciiSafeString($lengthened); 

しかしながら、これは、XY問題のビットです。そのままの状態で鍵を保管し、危険なことはしないでください。

関連する問題