SecureRandom 은 안전한 난수를 생성하고 이를 배열 섞기 또는 비밀번호와 같은 문자열 시퀀스 생성과 같은 일반적인 무작위 작업에 사용하기 위한 PHP 라이브러리입니다. 버전 7.0 이전에는 PHP에 보안 무작위 함수가 내장되어 있지 않았지만 보안 무작위 값을 생성하기 위해 다양한 무작위 소스를 사용할 수 있었습니다. 따라서 이 라이브러리에는 두 가지 주요 목적이 있습니다.
이 라이브러리는 추가 보안 임의 바이트 생성기를 제공하지 않습니다. 이는 단순히 확장을 통해 또는 내부적으로 PHP에서 사용할 수 있는 바이트 생성기를 사용합니다. PHP에서 일반적으로 사용할 수 있는 네 가지 생성기는 다음과 같습니다.
/dev/(u)random
mcrypt_create_iv()
함수 호출openssl_random_pseudo_bytes()
함수 호출이 라이브러리에서 생성된 무작위성의 보안은 기본 무작위 바이트 생성기에 전적으로 의존합니다. 라이브러리는 난수 분포를 균일하게 생성하는 데 필요한 정규화 외에 바이트에 대한 추가 변환을 수행하지 않습니다.
API 문서는 http://kit.riimu.net/api/securerandom/에서 확인할 수 있습니다.
OpenSSL
(OpenSSQL 생성기를 사용하려면)Mcrypt
(Mcrypt 생성기를 사용하려면)/dev/urandom
읽을 수 있어야 합니다. 이 라이브러리를 설치하는 가장 쉬운 방법은 Composer를 사용하여 종속성을 처리하는 것입니다. Composer를 통해 이 라이브러리를 설치하려면 다음 두 단계를 따르십시오.
프로젝트 루트에서 Composer 명령줄 설치를 실행하여 composer.phar
을 획득합니다.
설치 스크립트를 실행한 후에는 프로젝트 루트에 composer.phar
파일이 있어야 하며 다음 명령을 실행할 수 있습니다.
php composer.phar require "riimu/kit-securerandom:^1.3"
Composer를 통해 이 라이브러리를 설치한 후 설치 중에 Composer가 생성한 vendor/autoload.php
파일을 포함하여 라이브러리를 로드할 수 있습니다.
Composer 사용 방법에 이미 익숙하다면 프로젝트에 다음 composer.json
파일을 추가하고 composer install
명령을 실행하여 라이브러리를 종속성으로 추가할 수도 있습니다.
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
}
Composer를 사용하여 라이브러리를 로드하지 않으려면 최신 릴리스를 다운로드하고 프로젝트에 src
폴더를 추출하여 라이브러리를 수동으로 다운로드할 수도 있습니다. 그런 다음 제공된 src/autoload.php
파일을 포함하여 라이브러리 클래스를 로드할 수 있습니다.
라이브러리 사용법은 매우 간단합니다. 간단히 SecureRandom
의 인스턴스를 생성하고 임의의 값을 생성하는 메서드를 호출하면 됩니다. 예를 들어:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom ();
var_dump ( base64_encode ( $ rng -> getBytes ( 32 ))); // Returns a random byte string
var_dump ( $ rng -> getInteger ( 100 , 1000 )); // Returns a random integer between 100 and 1000
var_dump ( $ rng -> getFloat ()); // Returns a random float between 0 and 1
var_dump ( $ rng -> getRandom ()); // Returns a random float between 0 and 1 (not including 1)
var_dump ( $ rng -> getArray ( range ( 0 , 100 ), 5 )); // Returns 5 randomly selected elements from the array
var_dump ( $ rng -> choose ( range ( 0 , 100 ))); // Returns one randomly chosen value from the array
var_dump ( $ rng -> shuffle ( range ( 0 , 9 ))); // Returns the array in random order
var_dump ( $ rng -> getSequence ( ' 01 ' , 32 )); // Returns a random sequence of 0s and 1s with length of 32
var_dump ( $ rng -> getSequence ([ ' a ' , ' b ' , ' c ' ], 5 )); // Returns an array with 5 elements randomly chosen from 'a', 'b', and 'c'
var_dump ( $ rng -> getUuid ()); // Returns a random version UUID, e.g. '00056a74-036b-47c5-ab35-6f34a41a70ae'
SecureRandom
에서는 무작위성을 검색하기 위해 다음 메서드를 사용할 수 있습니다.
getBytes($count)
길이가 $count와 동일한 임의 바이트 문자열을 반환합니다.
getInteger($min, $max)
주어진 두 양의 정수(포함) 사이의 임의의 정수를 반환합니다.
getFloat()
0과 1(포함) 사이의 임의의 부동 소수점 값을 반환합니다.
getRandom()
정밀도가 52비트이고 반환된 값이 항상 1보다 작은 0과 1 사이의 임의 부동 소수점 값을 반환합니다. getFloat()
와 비교하여 값 분포는 더 균일하며 PHP_INT_MAX
에 종속되지 않습니다.
getArray(array $array, $count)
주어진 배열에서 임의의 요소 수를 반환합니다. 요소는 무작위 순서로 되어 있지만 키는 유지됩니다.
choose(array $array)
배열에서 선택된 임의의 값을 반환합니다.
shuffle(array $array)
무작위 순서로 배열을 반환합니다. 키는 보존됩니다.
getSequence($choices, $length)
임의의 값 또는 문자 시퀀스를 반환합니다. 선택 사항은 문자열이나 배열로 제공될 수 있습니다. 반환 값의 유형은 선택 항목 유형에 따라 다릅니다.
getUuid()
임의의 버전 4 범용 고유 식별자를 반환합니다. UUID는 무작위로 독립적으로 생성될 수 있으며 충돌 가능성이 매우 낮은 고유 식별자입니다. UUID의 예는 00056a74-036b-47c5-ab35-6f34a41a70ae
일 수 있습니다.
이 라이브러리에서 제공하는 생성기는 기본적으로 무작위성 소스로 /dev/urandom
사용합니다. /dev/random
에서 읽는 것은 일반적인 PHP 웹 애플리케이션에 추가 보안을 제공하지 않으며 차단 특성으로 인해 이러한 목적에 매우 부적합합니다.
대신 /dev/random
에서 읽어야 하는 합법적인 경우는 거의 없습니다. /dev/urandom
아직 제대로 시드되지 않았는지 걱정되는 경우에 주로 발생합니다. 그러나 이는 시스템 시작 시에만 문제가 되는 경향이 있기 때문에 일반적으로 웹 애플리케이션의 경우에는 해당되지 않습니다.
/dev/random
에서 읽어야 한다는 것을 알고 있다면 생성자 매개변수를 false로 설정하고 생성자에서 SecureRandom
에 생성기를 제공하여 RandomReader
및 Mcrypt
설정하여 이를 무작위성 소스로 사용할 수 있습니다. 예를 들어:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator );
SecureRandom
이 생성되면 현재 플랫폼에서 지원하는 보안 무작위 생성기 중 하나를 사용하려고 시도합니다. 다음과 같은 임의의 소스를 사용할 수 있으며 다음 순서로 시도됩니다.
GeneratorInternal
PHP 7.0에서 사용할 수 있는 내부 함수를 사용합니다.GeneratorRandomReader
단순히 무작위 장치 /dev/urandom
에서 바이트를 읽습니다.GeneratorMcrypt
mcrypt_create_iv()
사용하여 MCRYPT_DEV_URANDOM
소스로 사용하여 임의 바이트를 생성합니다.GeneratorOpenSSL
openssl_random_pseudo_bytes()
사용하여 임의 바이트를 생성합니다.OpenSSL에서 사용하는 알고리즘이 실제로 암호화가 강력한지 여부에 대한 논쟁이 있었습니다. 그러나 이에 대한 구체적인 증거가 부족하고 PHP 매뉴얼의 강점으로 인해 이 라이브러리는 기본적으로 OpenSSL을 마지막 대체 수단으로 사용하여 다양한 플랫폼에서 더 나은 호환성을 달성합니다.
바이트 생성기를 명시적으로 정의하려는 경우 이를 SecureRandom
의 생성자 매개변수로 제공할 수 있습니다. 예를 들어:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);
이 라이브러리의 저작권은 (c) 2014-2017 Riikka Kalliomäki입니다.
라이센스 및 복사 정보는 LICENSE를 참조하세요.