기본 콘텐츠로 건너뛰기

추천 가젯

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), 일치하지 않으면 일치하지...

OpenSSL 명령으로 비대칭키(RSA, 타원곡선) 생성하기

비대칭 암호화

비대칭 암호화(공개 키 암호화) 방식은 암호화와 복호화에 같은 키를 사용하는 대칭 암호화(비밀 키 암호화)와는 다르게 암호화와 복호화에 사용되는 키가 다른 암호화 방식을 말한다.


이 방식을 이용해서 전자서명, TLS가 가능하다.

RSA

컴퓨터가 엄청나게 큰 두 소수를 생성하여 곱하는 것은 쉽지만, 소인수분해하는 것은 어렵다는 점을 이용하여 공개 키와 비공개 키를 생성해 암호화를 하는 방식이다.


평문을 비밀키로 암호화했다면 공개키로만 풀 수 있고,

평문을 공개키로 암호화했다면 비밀키로만 풀 수 있다.

openssl 명령으로 RSA 비밀키 생성하기

먼저 비밀키를 생성한다.

openssl genrsa -out private.pem 2048
  • openssl genrsa: RSA 비밀키를 생성한다

  • -out [비밀키 저장 경로]: 비밀키를 저장할 경로를 지정한다. 필자는 'private.pem'으로 지정하였다.

  • 2048: 키 길이를 2048비트로 지정한다

비밀키를 생성하였다면 내용을 확인한다. cat private.pem

-----BEGIN PRIVATE KEY-----
...(중략)
-----END PRIVATE KEY-----

비밀 키는 생성할 때마다 랜덤하게 생성되고, BEGIN PRIVATE KEYEND PRIVATE KEY 사이에 위치해 있다. 버전에 따라 'RSA'라고 추가적으로 적혀 있을 수 있다.


비밀키를 생성했다면 읽기/쓰기/실행 권한을 적절히 선택하여(chmod)지정된 사용자만 접근 가능하도록 하자.

openssl 명령으로 RSA 공개 키 생성하기

비밀키를 생성하였다면, 해당 비밀키를 이용하여 공개키를 계산할 수 있다.

openssl rsa -in private.pem -out public.pem -pubout
  • openssl rsa: openssl의 rsa 기능을 이용한다.

  • -in [비밀키 경로]:비밀키의 경로를 지정한다. 필자는 위에서 생성한 'private.pem'을 사용하였다.

  • -out [저장할 공개키 경로]: 생성된 공개키를 저장할 경로를 지정한다. 필자는 'public.pem'으로 지정하였다.

  • -pubout: 공개키를 출력하는 옵션이다.

타원곡선

타원곡선 암호는 타원곡선에서 한 점에 특정 정수를 곱하는 것은 쉽지만, 해당 결과값으로 몇 번 더했는지(이산로그 문제) 알기 어려운 수학적 난제를 이용한 암호화 알고리즘이다.


여러 종류의 타원곡선이 있으며 적절한 타원곡선을 선택할 수 있다.

openssl ecparam -list_curves

openssl 명령으로 타원곡선 비밀 키 생성하기

먼저 비밀키를 생성한다.

openssl ecparam -name prime256v1 -genkey -out ec_private.pem
  • openssl ecparam: openssl 타원곡선 기능을 이용한다.

  • -name prime256v1: 곡선의 종류로 'prime256v1'을 선택한다.

  • -genkey: 비밀키를 생성한다.

  • -out [저장될 비밀키 경로]: 계산된 비밀키를 저장할 경로를 지정한다. 필자는 'ec_private.pem'으로 지정했다.

생성된 비밀키도 마찬가지로 chmod 명령으로 읽기/쓰기/실행 권한을 적절히 세팅한다.

openssl 명령으로 타원곡선 공개키 생성하기

openssl ec -in ec_private.pem -out ec_public.pem -pubout
  • openssl 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

댓글

가장 많이 본 글