AES 키 생성을위한 OpenSSL 해시 기능


8

OpenSSL은 AES-256의 키를 생성하기 위해 어떤 해시 함수를 사용합니까? 나는 그들의 문서에서 그것을 찾을 수 없습니다.

$ touch file
$ openssl aes-256-cbc -nosalt -P -in file

enter aes-256-cbc encryption password: (I type "a" and hit enter)
Verifying - enter aes-256-cbc encryption password: (I type "a" and hit enter)

key=0CC175B9C0F1B6A831C399E269772661CEC520EA51EA0A47E87295FA3245A605
iv =4FA92C5873672E20FB163A0BCB2BB4A4

key=입력 "a"에 대해 두 번째 마지막 줄 이후 에 어떤 해시 알고리즘이 무염 해시를 생성 합니까?

답변:


9

당연히 그것이 SHA1 다이제스트 알고리즘이지만 모든 정직하게 100 % 확실하게 말할 수는 없습니다.

그리고 누가 학대를 늘리기 위해 고안된 것이 학대 지시를 가질 것이라고 생각했을 것입니다.)

편집 : 이것은 귀하의 상황에서 도움이되지 않을 수 있지만 항상 그렇게함으로써 항상 알 수 있다고 생각합니다

openssl enc -d -a -md sha1 -aes-256-cbc -nosalt -p 

나는 내가 당신의 명령을 사용할 때와 같이 기본적으로 MD5를 사용하는 것으로 확인되었습니다 ((!) 참고 : 이러한 옵션 중 어느 것도 ... 메이지 페이지에 설명되지 않음)로 md5대신 sha1내가 원래 게시, 나는이 같은 결과를 얻을 수 있습니다. 문제는 MD5 (128 비트 해싱 알고리즘)에서 256 비트를 얻는 방법은 무엇입니까?
mk12

이 작업을 수행하는 한 가지 방법은 서로 다른 두 MD5를 이진 형식으로 연결하여 진정한 256 비트 키를 만드는 것입니다. 이것에 대한 몇 가지 다른 방법도 있습니다. PHP 패키지 "md5_base64"를 확인하십시오. PHP 사용자가 아니더라도 문서는 매우 유익합니다.
Snesticle

4

두 개의 MD5 해시가 연결되어 있습니다.

다음과 같이 파생됩니다.

128bit_Key = MD5(Passphrase + Salt)
256bit_Key = 128bit_Key + MD5(128bit_Key + Passphrase + Salt)

다음을 수행하여이를 확인할 수 있습니다.

$ echo Testing > file
$ openssl enc -aes-256-cbc -p -in file -out file.aes -salt
: enter aes-256-cbc encryption password: abc
: Verifying - enter aes-256-cbc encryption password: abc
: salt=3025373CA0530C93
: key=E165475C6D8B9DD0B696EE2A37D7176DFDF4D7B510406648E70BAE8E80493E5E
: iv =B030394C16C76C7A94DC22FDDB6B0744
$ perl -e 'print pack "H*", "3025373CA0530C93"' > salt
$ echo -n abc > passphrase
$ cat passphrase > key.128.tmp
$ cat salt >> key.128.tmp
$ md5sum key.128.tmp 
: e165475c6d8b9dd0b696ee2a37d7176d  key.128.tmp
$ perl -e 'print pack "H*", "e165475c6d8b9dd0b696ee2a37d7176d"' > key.128
$ cat key.128 > key.256.tmp
$ cat passphrase >> key.256.tmp
$ cat salt >> key.256.tmp
$ md5sum key.256.tmp 
: fdf4d7b510406648e70bae8e80493e5e  key.256.tmp

'key.128.tmp'와 'key.256.tmp'의 MD5가 어떻게 함께 연결되어 초기 명령의 출력과 동일한 키를 형성하는지 확인하십시오.


그리고 세 번째 반복을하면 IV를 얻게됩니다. 이 경우는 key 및 data = IV 크기 (256 및 128 비트)가 모두 해시 출력의 정확한 배수이기 때문에 편리합니다. 일반적으로 해시 출력을 연결하고 키의 첫 번째 K 비트와 IV의 다음 D 비트를 가져옵니다.
dave_thompson_085

업데이트 : 기본값은 md5 였지만 2016 년 1.1.0부터 sha256입니다. 에서 자세한 내용 crypto.stackexchange.com/questions/3298/...
dave_thompson_085

2

OpenSSL은 SHA1과 함께 AES를 사용합니다.

OpenSSL보다 더 나은 소스를 조사
하려면 OpenSSL 암호에 인터페이스 하는 기사 C ++ 클래스를 살펴보십시오 .

이 기사에는 다음과 같은 매우 간단한 소스 코드가 포함되어 있습니다.

OpenSSL AES-256-CBC 암호 및 SHA1 다이제스트 알고리즘을 사용하여 파일 또는 문자열을 암호화하고 해독 할 수 있습니다. openssl 명령 행 도구와 상호 운용 가능하므로 암호에 OpenSSL을 사용하는 것이 좋습니다.


1

답을 모르겠지만 OpenSSL 소스 코드 에서 쉽게 찾을 수 있습니다 .


2
"쉽게 충분"— main암호 요청 기능이있는 기능의 길이는 ~ 500 줄이며 gotos로 흩어집니다 .
mk12

5
와. 방금 소스 코드를 보았습니다. 실제로 읽을 수 없습니다. 의견이 없습니다. 한글자 변수 이름 어. 내가 제안한 것이 유감입니다.
Fran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.