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.binopenssl pkeyutl: openssl에서 제공하는 low-level 공개키/개인키 연산 유틸리티인pkeyutl을 이용한다.-encyprt: 암호화를 한다.-pubin: 입력받을 키의 종류를 공개키로 지정한다.-inkey [입력키]: 입력받을 키를 지정한다. 암호화를 할 때는 공개키를 지정한다. 필자는 'public.pem'으로 지정하였다.-in [입력파일]: 입력파일을 지정한다. 암호화를 할 때는 원문을 지정한다. 필자는 위에서 생성한 'key.txt'로 지정하였다.-out [출력파일]: 출력파일을 지정한다. 출력된 결과는 암호문이므로 저장될 이름을 지정한다. 필자는 'encrypted.bin'으로 지정하였다.
결과로 encrypted.bin 파일이 생성되었고, cat 명령이나 텍스트 편집기로 열어봐도 내용을 알 수 없게 암호화된 것을 확인할 수 있다. 이제 이 파일을 비밀키를 가진 사람에게 전달하면 그 사람은 내용을 해석할 수 있다.
비밀키로 복호화하기
이제 전달받은 'encrypted.bin'과 원래 가지고 있던 비밀키인 'private.pem'으로 복호화해 보겠다.
openssl pkeyutl -decrypt -inkey [private.pem] -in [encrypted.bin] -out [key_decrypted.txt]결과로 key_decrypted.txt 파일이 생성되고 내용을 잘 확인할 수 있다.
주의
RSA-2048의 개인키와 공개키 쌍으로는 최대 245바이트까지만 암복호화할 수 있다. 이보다 더 큰 사이즈의 파일은 대칭키 암호 알고리즘으로 암복호화해야 한다. 그래서 AES 등 대칭키로 원본을 암호화하고, 해당 대칭키를 비대칭 암호화하는 하이브리드 암호 시스템을 사용한다.
댓글
댓글 쓰기