추천 가젯
OpenSSL 명령으로 비대칭키(RSA, 타원곡선) 생성하기
비대칭 암호화
비대칭 암호화(공개 키 암호화) 방식은 암호화와 복호화에 같은 키를 사용하는 대칭 암호화(비밀 키 암호화)와는 다르게 암호화와 복호화에 사용되는 키가 다른 암호화 방식을 말한다.
이 방식을 이용해서 전자서명, TLS가 가능하다.
RSA
컴퓨터가 엄청나게 큰 두 소수를 생성하여 곱하는 것은 쉽지만, 소인수분해하는 것은 어렵다는 점을 이용하여 공개 키와 비공개 키를 생성해 암호화를 하는 방식이다.
평문을 비밀키로 암호화했다면 공개키로만 풀 수 있고,
평문을 공개키로 암호화했다면 비밀키로만 풀 수 있다.
openssl 명령으로 RSA 비밀키 생성하기
먼저 비밀키를 생성한다.
openssl genrsa -out private.pem 2048openssl genrsa: RSA 비밀키를 생성한다-out [비밀키 저장 경로]: 비밀키를 저장할 경로를 지정한다. 필자는 'private.pem'으로 지정하였다.2048: 키 길이를 2048비트로 지정한다
비밀키를 생성하였다면 내용을 확인한다. cat private.pem
-----BEGIN PRIVATE KEY-----
...(중략)
-----END PRIVATE KEY-----비밀 키는 생성할 때마다 랜덤하게 생성되고, BEGIN PRIVATE KEY와 END PRIVATE KEY 사이에 위치해 있다. 버전에 따라 'RSA'라고 추가적으로 적혀 있을 수 있다.
비밀키를 생성했다면 읽기/쓰기/실행 권한을 적절히 선택하여(chmod)지정된 사용자만 접근 가능하도록 하자.
openssl 명령으로 RSA 공개 키 생성하기
비밀키를 생성하였다면, 해당 비밀키를 이용하여 공개키를 계산할 수 있다.
openssl rsa -in private.pem -out public.pem -puboutopenssl rsa: openssl의 rsa 기능을 이용한다.-in [비밀키 경로]:비밀키의 경로를 지정한다. 필자는 위에서 생성한 'private.pem'을 사용하였다.-out [저장할 공개키 경로]: 생성된 공개키를 저장할 경로를 지정한다. 필자는 'public.pem'으로 지정하였다.-pubout: 공개키를 출력하는 옵션이다.
타원곡선
타원곡선 암호는 타원곡선에서 한 점에 특정 정수를 곱하는 것은 쉽지만, 해당 결과값으로 몇 번 더했는지(이산로그 문제) 알기 어려운 수학적 난제를 이용한 암호화 알고리즘이다.
여러 종류의 타원곡선이 있으며 적절한 타원곡선을 선택할 수 있다.
openssl ecparam -list_curvesopenssl 명령으로 타원곡선 비밀 키 생성하기
먼저 비밀키를 생성한다.
openssl ecparam -name prime256v1 -genkey -out ec_private.pemopenssl ecparam: openssl 타원곡선 기능을 이용한다.-name prime256v1: 곡선의 종류로 'prime256v1'을 선택한다.-genkey: 비밀키를 생성한다.-out [저장될 비밀키 경로]: 계산된 비밀키를 저장할 경로를 지정한다. 필자는 'ec_private.pem'으로 지정했다.
생성된 비밀키도 마찬가지로 chmod 명령으로 읽기/쓰기/실행 권한을 적절히 세팅한다.
openssl 명령으로 타원곡선 공개키 생성하기
openssl ec -in ec_private.pem -out ec_public.pem -puboutopenssl ec: openssl의 타원곡선 기능을 이용한다.-in [비밀키 경로]: 공개키를 생성하기 위해 비밀키 경로를 지정한다. 필자는 위에서 생성한 'ec_private.pem'으로 지정했다.-out [저장될 공개키 경로]: 계산된 공개키를 저장할 경로를 지정한다. 필자는 'ec_public.pem'으로 지정했다.-pubout: 비밀 키를 기반으로 공개키를 생성한다.
부록
최신 버전의 openssl을 이용한다면 최신 버전에서 권장하는 명령을 사용할 수 있다.
RSA
비밀키 생성:
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048공개키 생성:
openssl pkey -in private.pem -out public.pem -pubout
타원곡선
비밀키 생성:
openssl genpkey -algorithm EC -out ec_private.pem -pkeyopt ec_paramgen_curve:prime256v1공개키 생성:
openssl pkey -in ec_private.pem -out ec_public.pem -pubout
댓글
댓글 쓰기