RSA Key Decoder

카테고리: 비대칭키 & 타원곡선 · 노드 타입 ID: asymmetric-rsa-key-decode

RSA SPKI 공개키 또는 PKCS#8 개인키(DER)에서 구성 요소(N, e, d 등)를 꺼낸다

개요

RSA 키를 열어 그 안의 정수를 꺼내 준다. RSA 공개키는 모듈러스 N과 공개 지수 e, 두 숫자뿐이다. 개인키에는 개인 지수 d와, 복호화와 서명을 빠르게 해 주는 값이 더해진다. N의 두 소인수 p, q와 CRT 매개변수라 부르는 파생 숫자 셋이다.

읽는 형식은 둘뿐이며 모두 DER 바이트이다. 공개키는 SubjectPublicKeyInfo(SPKI), 개인키는 PKCS#8이다. RSA Key Generator가 만들고 다른 RSA 노드가 쓰는 형식이다. PEM 텍스트(-----BEGIN ...----- 형태)와 예전 PKCS#1 인코딩은 읽지 않는다. PEM은 Base64 포장일 뿐인데 NodeCrypto는 PEM을 아예 다루지 않고, PKCS#1 키는 다른 RSA 노드도 받지 못하므로 여기서 변환해도 쓸 수 없는 키가 되기 때문이다. 이런 키는 외부 도구로 SPKI나 PKCS#8 DER로 먼저 바꾼다.

연결된 선만으로는 공개키인지 개인키인지 알 수 없으므로 Key Type 속성으로 고르며, 노드는 키가 실제로 그 종류인지 검사한다. 개인키 전용 포트는 Key Type이 Private일 때만 나타난다.

사용 시점

파라미터 설정

파라미터 (ID)타입 및 기본값노출 조건설명 및 옵션
Key Type
keyType
select
기본값: Public
항상 노출 Key 입력에 들어 있는 키의 종류이다. 연결된 키가 다른 종류이면 노드가 실패하므로 공개키를 Private으로, 개인키를 Public으로 읽을 수 없다.
  • Public: 공개키(SPKI). N과 e를 출력한다.
  • Private: 개인키(PKCS#8). d, p, q, dP, dQ, qInv도 출력한다.

포트 입출력 명세

연결 규칙, 데이터 타입 색상, 동적 포트 생성은 포트와 연결을 참고한다.

입력 포트

포트 성격: 고정 입력 포트(총 1개).

포트 이름포트 ID데이터 타입필수 여부노출 조건설명
Key key Bytes (SPKI/PKCS#8 DER) 필수 항상 노출 DER 바이트로 된 RSA 키이다. Public은 SPKI, Private은 PKCS#8이다. PEM 텍스트와 PKCS#1은 받지 않는다.

출력 포트

포트 성격: 조건부 출력 포트(항상 2개, 개인키일 때만 6개 추가).

모든 숫자는 Bytes이며 big-endian 순서의 부호 없는 정수이고 앞에 붙는 0 바이트가 없다. 최상위 비트가 1인 숫자 앞에 DER이 덧붙이는 00은 제거한다. 그래서 2048비트 모듈러스는 정확히 256바이트로, e = 65537은 세 바이트 01 00 01로 나온다. 정수로 바꾸려면 Bytes to Int를 쓴다.

포트 이름포트 ID데이터 타입노출 조건설명
N n Bytes 항상 노출 모듈러스 N = p × q이다. 비트 길이가 곧 키 크기이다.
e e Bytes 항상 노출 공개 지수 e이다. 보통 01 00 01(65537)이다.
d d Bytes keyType = Private 개인 지수 d이다. e의 λ(N) = lcm(p − 1, q − 1)에 대한 역수이다. 비밀 값이다.
p p Bytes keyType = Private N의 첫째 소인수이다. 비밀 값이다.
q q Bytes keyType = Private N의 둘째 소인수이다. 비밀 값이다.
dP dp Bytes keyType = Private CRT 지수 d mod (p − 1)이다. 개인키 연산을 빠르게 하는 데 쓴다.
dQ dq Bytes keyType = Private CRT 지수 d mod (q − 1)이다.
qInv qInv Bytes keyType = Private CRT 계수로, q의 p에 대한 역수이다.

오류 케이스

실행 중 아래 조건이 발생하면 이 노드는 ERROR 상태가 되며, 출력 포트에 연결된 하위 노드는 실행되지 않는다.

오류 코드기본 엔진 메시지발생 조건
INVALID_KEY_FORMAT RSA 키 형식이 올바르지 않는다 입력이 선택한 종류의 RSA 키가 아닐 때 발생한다. 흔한 원인은 다음과 같다. DER이 잘렸거나 손상되었다. DER 바이트 대신 PEM 텍스트를 연결했다. 키가 PKCS#1 형식이다. 공개키인데 Key Type이 Private이다(또는 그 반대). ECC 같은 다른 알고리즘의 키이다. RSASSA-PSS 키(PSS 스킴에 묶인 키)이며 이는 지원하지 않는다. 메시지에 원인이 적힌다.

활용 예시

생성한 키에서 숫자 읽기

키를 만들어 구성 요소를 확인한다.

  1. RSA Key Generator의 Private Key를 Key에 연결하고 Key Type을 Private으로 설정한다.
  2. N(2048비트 키라면 256바이트), e(01 00 01), d를 읽는다. p와 q가 각각 128바이트인지 확인한다.

공개키 부분만 꺼내기

개인키를 건드리지 않고 공개키에서 N과 e를 꺼낸다.

  1. RSA Key Generator의 Public Key를 연결하고 Key Type은 Public으로 둔다.
  2. N과 e만 보인다. 이를 RSA Key Encoder에 보내면 같은 공개키가 다시 만들어진다.