전공영역 공부 기록

ssh키쌍으로 데이터 암호화, 복호화

악분 2024. 7. 28. 21:19
반응형

안녕하세요. 글은 ssh 공개키와 개인키로 데이터를 암호화하는 방법을 설명합니다.

 

1.  들어가며

ssh 공개키 또는 개인키로 데이터를 암호화, 복호화하는 것은 암호학 분야입니다. 수학 알고리즘을 사용하여 데이터를 암호화와 복호화를 해야 합니다. 다행히 openssl명령어를 사용하면 쉽게 데이터를 암호화와 복호화 할 수 있습니다. 암호화, 복호화 알고리즘은 키를 생성할 때 지정합니다. 알고리즘은 RSA, ECDSA 등이 있습니다.

 

2.  예제코드

 

3.  예제

3.1 키쌍 생성

ssh-keygen명령어를 사용해서 개인키와 공개키를 생성합니다. ssh키의 알고리즘은 RSA을 사용합니다. mykey.pub파일이 공개키이고 mykey는 개인키입니다.

ssh-keygen -t rsa -b 4096 -C "your.email@example.com" -f mykey

 

3.2  암호화 할 예제파일 생성

암호화를 할 예제파일을 생성합니다. 저는 파일이름을 plaintext.txt로 했습니다.

echo “hello world” >plaintext.txt

 

3.3 데이터 암호화

openssl명령어를 사용해서 plaintext.txt파일 내용을 암호화합니다. -encrypt인자를 사용하여 데이터를 암호화합니다.

openssl pkeyutl -encrypt -inkey mykey.pub -pubin -in plaintext.txt -out encrypted.txt

 

ssh-keygen명령어로 생성한 키로 openssl명령어를 사용하면 오류가 발생합니다. openssl명령어가 ssh-keygen명령어로 생성한 키를 인식하지 못하기 때문입니다. 현재 공개키는 아래처럼 ssh-rsa 시작합니다.

 

openssl 키를 인식하려면 아래 그림처럼 -----BEGIN으로 시작해야 합니다.

 

따라서 공개키를 openssl 인식하는 포맷으로 변경해야 합니다. ssh-keygen에서 -e옵션을 사용하면 키포맷을 변경 있습니다. -m옵션을 사용해서 공개키를 PEM포맷으로 변경합니다.

ssh-keygen -e -m PEM -f mykey.pub > mykey_pub.pem

 

다시 데이터 암호화를 시도하면 성공합니다.

openssl pkeyutl -encrypt -inkey mykey_pub.pem -pubin -in plaintext.txt -out encrypted.txt

 

encrypted.txt파일 내용을 확인하면 암호화된 바이너리 데이터가 있습니다.

 

3.4 데이터 복호화

openssl명령어를 사용해서 암호환 데이터를 복호화합니다. -decrypt인자를 사용하여 데이터를 암호화합니다.

openssl pkeyutl -decrypt -inkey ./mykey -in encrypted.txt -out decryption.txt

 

openssl ssh-keygen으로 생성한 키를 인식할 없어서 데이터 복호화를 실패합니다

 

개인키는 BEGIN으로 시작하지만 OPENSSH키라고 명시되어 있어 openssl 인식하지 못합니다.

 

개인키도 공개키처럼 ssh-keygen명령어로 포맷을 PEM으로 변경합니다.

ssh-keygen -p -m PEM -f ./mykey

 

다시 데이터 openssl명령어를 실행하면 복호화를 성공합니다

openssl pkeyutl -decrypt -inkey ./mykey -in encrypted.txt -out decryption.txt

 

decryption.txt파일 내용을 확인하면 복호환 데이터가 보입니다.

cat decryption.txt

반응형