기본 콘텐츠로 건너뛰기

추천 가젯

OpenSSL 명령어로 비대칭 암호화하기 (공개키로 암호화하고 비밀키로 복호화하기)

비대칭 암호화 암호화 키와 복호화 키가 서로 다른 비대칭 암호의 특징을 이용하여 공개키로 암호화하고 비밀키로 복호화할 수 있다. 우선 이전에 생성한 private.pem 과 public.pem 이 필요하다. 비밀키는 계속 가지고 있고, 통신을 하고자 하는 사람에게 공개키를 전달한다. 그 다음 공개키를 가진 사람이 공개키로 암호화하고, 암호화한 결과를 전달한다. 이 과정은 도청되어도 비밀키를 알아낼 수 없기에 원문을 도청자가 알아낼 수 없다. 원문 준비하기 원본은 다음과 같이 준비한다. 주로 대칭 암호화를 사용할 키를 전달할 때 공개키 암호를 보조하여 사용하므로, 여기서는 키파일을 생성하겠다. echo -n "key=" > key.txt openssl rand -hex 32 >> key.txt echo -n "iv=" >> key.txt openssl rand -hex 16 >> key.txt 그러면 key와 iv가 포함된 파일이 완성된다. 이 파일을 안전하게 전달하기 위해 암호화한다. 공개키로 암호화하기 openssl pkeyutl -encrypt -pubin -inkey [public.pem] -in [key.txt] -out encrypted.bin openssl pkeyutl : openssl에서 제공하는 low-level 공개키/개인키 연산 유틸리티인 pkeyutl 을 이용한다. -encyprt : 암호화를 한다. -pubin : 입력받을 키의 종류를 공개키로 지정한다. -inkey [입력키] : 입력받을 키를 지정한다. 암호화를 할 때는 공개키를 지정한다. 필자는 'public.pem'으로 지정하였다. -in [입력파일] : 입력파일을 지정한다. 암호화를 할 때는 원문을 지정한다. 필자는 위에서 생성한 'key.txt'로 지정하였다. -out [출력파일] : 출력파일을 지정한다. 출력된 결과는 암호문이므로 저장될 이름을 지정한다. 필자는 'e...

OpenSSL 명령으로 RSA 개인키와 공개키 매칭 확인하기

Modulus

모듈러스는 RSA 공개 키 알고리즘에서 사용하는 핵심 숫자 값으로 크기가 다른 매우 큰 두 소수의 곱이다. 공개키개인키에 모두 포함되어 있으므로 모듈러스 값을 비교하는 것으로 키 쌍이 서로 매칭되는지 확인할 수 있다.

키에서 모듈러스 값 확인하기

openssl rsa의 -modulus 옵션을 이용하여 키의 모듈러스 값을 확인할 수 있다.

개인 키의 모듈러스 값 확인하기

openssl rsa -in private.pem -modulus -noout
  • openssl rsa: openssl의 RSA 기능을 이용한다.

  • -in [개인키 파일 경로]: 개인키 파일 경로를 입력한다. 필자는 'private.pem' 파일로 지정했다.

  • -modulus: RSA 키 모듈러스를 출력한다.

  • -noout: 키를 출력하지 않는다.

위 명령을 실행하면 MODULUS=...가 표시된다.

공개 키의 모듈러스 값 확인하기

openssl rsa -pubin -in public.pem -modulus -noout
  • -pubin: 입력 파일로써 공개키를 지정한다.

결과는 위와 마찬가지로 MODULUS=...로 표시된다.


이 모듈러스 값이 서로 일치하는지 직접 눈으로 확인할 수 있다.

두 명령을 한 번에 실행하는 스크립트

(diff <(openssl rsa -in [비밀키 경로] -modulus -noout) <(openssl rsa -pubin -in [공개키 경로] -modulus -noout)) > /dev/null && echo "match" || echo "not match"

주의: <() (프로세스 치환)은 일부 쉘에서 작동하지 않을 수 있다.


결과

  • 두 키가 서로 쌍인 경우: match

  • 두 키가 서로 쌍이 아닌 경우: not match

diff 명령을 사용한다. diff 명령은 두 내용이 일치하면 아무런 출력도 하지 않고(return 0), 일치하지 않으면 일치하지 않는 부분을 출력하는 명령어이다. (return 1)


따라서 성공적으로 실행되었다면 return 0, "match"를 출력하고, 그렇지 않으면 "not match"를 출력하게 된다.

부록

모듈러스 값을 직접 확인하기에는 내용이 긴데, 이를 md5로 해시하여 짧게 해시된 값을 확인하면 보기 편하다.

$ openssl rsa -in private.pem -modulus -noout | md5sum

$ openssl rsa -pubin -in public.pem -modulus -noout | md5sum

주의사항

확인한 값은 MODULUS=...와 같이 'MODULUS=' 문자열을 포함한 값이기 때문에, 실제 모듈러스 값을 저장하거나 해시가 필요한 경우에는 반드시 해당 문자열을 제거하여야 한다.

댓글

가장 많이 본 글