[암호학] RSA 적용 : 2) RSA Key 포맷
2022. 5. 2. 15:59
반응형
이제 API에서 RSA를 이용하기 위해서 키를 생성하고, 교환하는 과정을 거쳐야 한다.
키를 생성하여 만들어 적용시키다 보니 RSA 공개키를 전달에는 두 가지의 포맷이 있음을 알게 되었다.
인증서에 저장되어 있는 키나, API에서 전달해주는 키의 포맷은 두 가지 중 하나일텐데, 각자 인코딩 혹은 디코딩 시 취해주어야 할 내용이 다를 수 있다.
따라서 해당 두 포맷에 대해 간단하게 적어놓으려고 한다.
RSA 키교환 과정
- 서버는 공개키와 개인키를 직접 생성, 혹은 인증서에 저장되어 있는 키를 얻어옴
- 클라이언트에게 제공할 공개키를 제공하는 API를 생성하거나 세션에 저장하는 등, 제공할 방법 만들기
- 클라이언트는 제공받은 공개키로 평문을 암호화 후 Request
- 서버는 받은 Request 암호문을 복호화하여 사용
공개 키 포멧
PKCS#1
- PKCS는 공개 키 암호 표준에 대한 표준 프로토콜이다.
- PKCS#1은 RSA의 공개 키와 비밀 키에 대한 규격을 정의하고 검증에 필요한 알고리즘과 규격을 정의한다.
- RSA Public Key는 ASN.1 방식으로 사용할 것을 규정하였다.
RSA 공개키의 Format
- 앞에서 말했던 N(Modulus)과 E(Exponent) 두 개의 정수로 구성되어 있다.
- 포멧에는 DER 형식과 PEM 형식, 두 가지가 있다.
DER
- Public Key의 N과 E값을 PKCS#1에 규정된 ASN.1 구조에 맞추어 DER 형식으로 인코딩한 방식.
<RSAKeyValue> <Modulus> vbqw+M271mGdwZC7yBeGStXQqrYlmLkleKWrWWWzira4GvyFmOSyg2bwFHMCszTcntNasAP2fJLawXxaU3ZhHjlX0cSVtfh48uMLgSgZ2512scLzQYOsB+JeTj2s61La4KcQ7cuZ9EyEmfQ6jk8D4Rq0bhBRUjWv30WvMrAwuM0= </Modulus> <Exponent>AQAB</Exponent> </RSAKeyValue> |
- Modulus에 N값, Exponent값에 E값이 인코딩되어 들어가있다.
PEM
- Public Key의 N과 E값을 Base64 방식으로 인코딩한 방식, 아스키 텍스트 형식으로 변환된다.
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtyjJI4iZgMdZT3nl9ZnqAXtAR\nISZm1q+wdXRSYpe0wA2DWCdQ4qnoZZmt2sWCw6682PKgAdbDZ22k0fWHCERSZQgW\nmQYx/zidns1JpX43s36+zUi2dPNjG+ww0/W0/l0aN/aLMTDqXlLzGZSQrM3rJBB3\nQlhFfdjIk1QMbZ6n7QIDAQAB -----END PUBLIC KEY----- |
- -----BEGIN PUBLIC KEY-----와 -----END PUBLIC KEY-----의 Header를 통해 구분한다.
반응형
'CS > 보안' 카테고리의 다른 글
[암호학] RSA 적용 : 3) RSA 적용하기 (Node.js) (0) | 2022.05.02 |
---|---|
[암호학] RSA 적용 : 1) RSA 키교환 방식이란 (0) | 2022.05.02 |