RSA Key Decoder
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일 때만 나타난다.
사용 시점
- 생성했거나 가져온 키를 점검할 때 사용한다. N이 얼마나 큰지, 어떤 e를 썼는지, p와 q가 무엇인지 확인한다.
- 교재나 시험 벡터의 키를 알려진 N, e, d 값과 대조할 때 사용한다. 예를 들어 출력을 Value Comparator와 비교한다.
- 키 숫자로 직접 계산할 때 사용한다.
N과e를 Bytes to Int에 넣고 스크립트에서 다룬다.
파라미터 설정
| 파라미터 (ID) | 타입 및 기본값 | 노출 조건 | 설명 및 옵션 |
|---|---|---|---|
Key TypekeyType |
select기본값: Public |
항상 노출 | Key 입력에 들어 있는 키의 종류이다. 연결된 키가 다른 종류이면 노드가 실패하므로 공개키를 Private으로, 개인키를 Public으로 읽을 수 없다.
|
포트 입출력 명세
연결 규칙, 데이터 타입 색상, 동적 포트 생성은 포트와 연결을 참고한다.
입력 포트
포트 성격: 고정 입력 포트(총 1개).
| 포트 이름 | 포트 ID | 데이터 타입 | 필수 여부 | 노출 조건 | 설명 |
|---|---|---|---|---|---|
Key |
key |
Bytes |
필수 | 항상 노출 | 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 스킴에 묶인 키)이며 이는 지원하지 않는다. 메시지에 원인이 적힌다. |
활용 예시
생성한 키에서 숫자 읽기
키를 만들어 구성 요소를 확인한다.
- RSA Key Generator의
Private Key를Key에 연결하고 Key Type을Private으로 설정한다. N(2048비트 키라면 256바이트),e(01 00 01),d를 읽는다.p와q가 각각 128바이트인지 확인한다.
공개키 부분만 꺼내기
개인키를 건드리지 않고 공개키에서 N과 e를 꺼낸다.
- RSA Key Generator의
Public Key를 연결하고 Key Type은Public으로 둔다. N과e만 보인다. 이를 RSA Key Encoder에 보내면 같은 공개키가 다시 만들어진다.