OpenSSL 3DES 암호화 매개 변수


2

암호 로 TripleDES알고리즘 을 사용하여 텍스트를 암호화한다고 가정하면 CBC두 가지 선택이 있습니다.

마찬가지로 1 온라인 도구,

2- OpenSSL 도구.

에서 온라인 도구 , 나는 텍스트의 입력 KEY과를 IV.

에서 OpenSSL을 , 나는 아래의 명령을 입력합니다 :

OpenSSL> des-ede3-cbc -in MyText.txt -K <KEY> -iv <IV>


그러나 아래 명령을 사용하면 어떻게됩니까?

OpenSSL> des-ede3-cbc -in Mytext.txt

첫 번째 질문 : 알고 싶습니다 .KEY 다음 두 줄에 입력 한 비밀번호로 구성되어 있습니까? 어떤 알고리즘을 만들 것인가?

누군가 비밀번호 만 가지고 있다면 암호화 된 텍스트를 해독 할 수 있습니까?

두 번째 질문 :Salt 매개 변수 란 무엇입니까 ? -nosalt를 사용하는 암호화 명령과 그렇지 않은 암호화 명령의 차이점은 무엇입니까?

세 번째 질문 :을 사용할 때 -base64출력은 base64 형식입니다. 이 매개 변수를 사용하지 않으면 출력 형식은 무엇입니까?


업데이트 : 넷째 질문 : 암호화 된 텍스트를 해독하는 데 필요한 것은 무엇입니까? 비밀번호 만? IV와 KEY? 또는 그들 모두?

다섯 번째 질문 :

openssl 명령 줄에 비밀번호로 "1"을 입력합니다. 그런 다음 온라인 도구로 "1"의 MD5 해시를 만듭니다. 아래 그림에서 볼 수 있듯이 3DES KEY의 처음 2 개는 내가 입력 한 암호의 MD5 해싱과 같습니다. 키의 마지막 바이트가 무엇인지 알고 싶습니다. 어떻게 만드는가?

누군가 비밀번호 만 가지고 있다면 어떻게 내 암호화 된 텍스트를 해독 할 수 있습니까?

여기에 이미지 설명을 입력하십시오


1
아브라함, 하위 질문을 제거하기 위해 질문 편집을 중지하십시오. 당신은 이것을 혼란스럽게 만들고 있습니다. 하위 질문 순서를 일관성있게 만들기 위해 귀하의 질문을 롤백하고 일관성있게 만들기 위해 @mtak의 답변으로 편집 사항을 롤백했습니다.
Spiff

@Spiff 왜? !! 질문과 답변의 일부는 과도하고 쓸모가 없습니다! 예를 들어, 다섯 번째 질문은 거의 첫 번째 질문과 거의 동일합니다. 두 번째 질문은 좋은 질문이 아닙니다! 그리고 ... 왜 그렇게 했습니까?! : /
Abraham

1
아브라함,이 사이트는 그렇게 할 때 제대로 작동하지 않기 때문입니다. 실제로 질문 게시 당 하나의 질문에 대한 것입니다. @mtak은 이미 이전 하위 질문 1, 2 및 3에 답변 한 다음 하위 질문 1을 제거했을 때 하위 답변 1이 새로운 하위 질문 1 (이전 하위 질문 2)과 일치하지 않았습니다.
Spiff

답변:


1
  1. 키 및 IV는 OpenSSL 팀이 자랑하지 않는 OpenSSL 특정 알고리즘을 사용하여 지정한 비밀번호에서 파생됩니다. 이전 버전과의 호환성을 위해 유지되지만 PKCS의 PBKDF2와 같은 더 나은 암호 기반 키 파생 기능을 사용하는 것이 좋습니다.

OpenSSL의 맞춤형 키 파생 알고리즘은 EVP_BytesToKey (3) 함수에 있습니다.

키:

-K key 사용할 실제 키 : 16 진수만으로 구성된 문자열로 표시되어야합니다.

IV :

암호화에서 초기화 벡터 (IV) 또는 시작 변수 (SV) [1]는 일반적으로 무작위 또는 의사 난수 여야하는 암호화 기본 요소에 대한 고정 크기 입력입니다.

IV는 파일을 암호화하는 데 사용되는 추가 입력입니다. 그것은 핵심 이 아닙니다 (단지 용어라고 생각합니다).

2 소금은 지정한 키에 대한 추가 (접두사)입니다. (참조 위키 백과 . 그것은 불가능 키에 무지개 테이블 또는 미리 계산 된 해시 테이블을 사용 할 수 있습니다. 소금은 일반적으로 암호화되지 않은 저장됩니다.

3 출력은 바이너리이며 인쇄 할 수없는 문자를 포함합니다. 터미널 에뮬레이터는 해당 바이트 값을 기본 문자 인코딩 및 서체에서 인쇄 가능한 문자로 렌더링하려고 시도하지만 "가비지 텍스트"처럼 보이며 복사 / 붙여 넣기, FTP 또는 전자 메일에 안전하지 않을 수 있습니다.

4 암호화 된 텍스트를 해독하려면 키와 IV가 필요합니다. 둘 중 하나 또는 둘 다가없고 누락 된 비밀번호가 비밀번호에서 파생 된 경우 비밀번호가있는 경우 비밀번호에서 누락 된 키 및 / 또는 IV를 다시 파생시킬 수 있습니다. 이미 소금이 있기 때문에 소금이 필요하지 않습니다. 암호화 된 텍스트의 시작 부분에 미리 추가됩니다. 솔트는 실제로 비밀이 아니며 미리 계산 된 해시 테이블과 레인보우 테이블을 호일로 만드는 방법 일뿐입니다.

5 EVP_BytesToKey (3)에 정의 된 대로 비밀번호 "1"및을 사용하는 경우 --nosalt키의 첫 16 바이트는 다음과 같습니다.

md5( D_0 || password || salt)

(이 맥락에서 ||논리적이지 않은 연결을 의미합니다 or)

어느 것이

md5 ( `null` || "1" || `null`)

어느 것이

md5("1")

어느 것이

0xc4ca4238a0b923820dcc509a6f75849b

이 값은 매뉴얼 페이지가 호출하는 것 D_1입니다.

Key와 IV의 나머지 필요한 바이트는 다음과 같이 생성됩니다.

md5( D_1 || password || salt)

어느 것이

md5( 0xC4CA4238A0B923820DCC509A6F75849B || "1" || `null` )

어느 것이

md5( 0xC4CA4238A0B923820DCC509A6F75849B31 )

(ASCII "1"은 D_1값 끝에서 0x31로 연결됩니다. )

그것은 다음과 같이 밝혀졌습니다 :

0x7976c7161415c830816dd4068a1d9a52

그 맨 페이지가 D_2라고 부르는 것입니다.

키는 D_1이미 입증 된 것보다 8 바이트 만 더 필요 하므로 D_2의 처음 8 바이트를 가져와 다음과 같이됩니다.

Key: C4CA4238A0B923820DCC509A6F75849B7976c7161415c830

IV에는 8 바이트 만 필요하며 D_2에서 8 개의 사용하지 않는 바이트가 있으므로 IV가됩니다.

IV: 816dd4068a1d9a52

다음은 키의 첫 16 바이트 인 D_1을 생성하는 명령 행입니다 (예 --nosalt: 비밀번호 "1"및 ).

echo -n "1" | openssl md5

다음은 키의 나머지 8 바이트와 IV의 모든 8 바이트를 더한 D_2를 생성하는 명령 줄입니다.

echo -n "$(echo -n "1" | openssl md5 -binary)1" | md5

이것은 D_1의 출력 (ASCII 인코딩 16 진수로 변환하지 않고 2 진으로 유지)을 취하고 "1"(0x31)을 추가하고 그 결과를 가져 와서 작동합니다 md5.


1
하지만 암호는 열쇠가 아니라고 생각합니다! -p명령에 매개 변수를 사용 하여 표시 IV하고 KEY출력 할 때 키 값이 이전 줄에서 입력 한 암호와 다르기 때문입니다. [이 명령에서 : OpenSSL> des-ede3-cbc -in Mytext.txt]
아브라함

출력 형식이 이진 인 경우 왜 읽을 수없는 문자가 표시됩니까? (마음, 일부 스마일 등)?
Abraham

1
터미널이 해당 문자 (텍스트가 아닌 이진 문자)를 해석 할 수없고 기본 문자 세트를 사용하여 표시하려고하기 때문입니다.
mtak

@mtak 귀하의 답변 (최소한의 하위 질문 2와 3에 대한)은 훌륭했습니다. 내 자신의 글을 쓰지 말고 당신의 답변으로 뛰어 들어 주셔서 용서해주세요. 나는 당신이 당신과 경쟁하고 신용을 훔치는 것이 아니라 당신의 답변에 대한 담당자를 얻길 원했습니다.
Spiff

1
@Spiff와 mtak에게, 감사합니다. 대단히 :)
아브라함
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.