RSA
Rivest Shamir Adleman
는 큰 정수의 모듈러 거듭제곱을 사용하는 공개키 기술이다. 교과서의 정수 연산을 실제 암호화·서명으로 쓰려면 같은 스킴과 엄격한 입력 검증이 필요하다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 공개키와 개인키의 계산 관계를 이용한다.
- 암호화와 에서 서로 다른 스킴을 사용한다.
- 대칭키 기술과 결합해 큰 데이터 처리와 신원 증명을 분담한다.
02어떤 순서로 동작하나
- 모듈러스
서로 다른 소수 p·q로 n=pq를 만들며 공개키는 n·e를 포함한다. p·q를 알면 비밀 지수 계산에 필요한 구조가 드러난다.
- 역원 조건
교과서 예에서 gcd(e,)=1인 e를 고르고 ed≡1 mod 을 만족하는 d를 사용한다.
- 입력 범위
기본 연산은 0≤m<n인 정수 대표값을 처리한다. 임의 길이 파일을 그대로 한 정수 연산에 넣는 구조가 아니다.
- 스킴의 역할
OAEP는 메시지·난수·해시·길이 조건을 인코딩하고, PSS는 서명용 인코딩을 정한다. 두 스킴을 교환해 쓸 수 없다.
- 키 길이의 한계
작은 정수는 계산 원리만 설명한다. 실제 안전성은 충분한 강도와 검증된 구현·난수·오류 처리까지 요구한다.
03먼저 알아둘 용어와 구성요소
- 두 소수의 곱으로 만드는 연산의 법.
- 공개키에 포함되는 지수.
- 적절한 모듈러 역원 관계를 만족하는 비밀 지수.
- 각각 암호화와 서명을 위한 인코딩·검증 스킴.
- 암호화에 메시지 길이·난수·해시를 포함한 인코딩을 결합하는 스킴.
- 서명에 확률적 인코딩을 결합하는 스킴.
- 서로 다른 소수 p·q의 곱에 대해 (p−1)(q−1)이 되는 오일러 함수 값.
RSA 과제의 modulus와 서명 입력 바이트 읽기
modulus를 공개키 전체와 혼동하지 않고, 공개키 추출·서명·검증을 서로 다른 작업으로 구분한다.
실습 구성과 전제
- 의 교육용 키 또는 자신이 만든 폐기 가능한 실습 키만 사용한다.
- 작업 폴더에 키와 메시지를 분리해 저장하고 실제 운영 개인키는 가져오지 않는다.
과제가 요구하는 값을 구분한다
- 공개키에는 과 가 필요하다. modulus의 16진수 문자열만 저장한 파일은 일반적인 PEM 공개키 파일이 아니다.
- 문제는 modulus 문자열을 구한 다음 그 문자열에 서명하라고 요청한다. 키를 암호화하는 작업이나 modulus 자체를 공개키 인증서로 바꾸는 작업이 아니다.
shellopenssl rsa -in lab-private.pem -modulus -noout openssl pkey -in lab-private.pem -pubout -out lab-public.pem자신의 폐기 가능한 실습 키에서 modulus를 조회하고 공개키를 추출한다.
원본 크기로 보기 ↗- 화면은 개인 RSA 키를 교육용 입력으로 주고 modulus의 16진수 표현과 서명을 각각 요구한다.
- BEGIN PRIVATE KEY 표시는 PEM 컨테이너의 시작이며, 답안 입력칸 두 개는 서로 다른 결과물을 받는다.
확인 기준n만 추출한 파일과 공개키 PEM 파일을 이름부터 다르게 관리한다.
서명할 메시지의 바이트를 고정한다
- 과제가 정한 16진수 대소문자·접두사·개행 포함 여부를 먼저 확인한다. 보이는 글자가 같아도 마지막 LF가 있으면 해시 입력이 달라진다.
- 서명은 개인키로 수행하고 검증은 공개키로 수행한다. 는 생성된 서명 바이트를 답안에 넣기 쉬운 문자열로 바꾸는 표현이다.
shellopenssl dgst -sha256 -sign lab-private.pem -out signature.bin message.txt openssl dgst -sha256 -verify lab-public.pem -signature signature.bin message.txt메시지 파일을 중간에 수정하지 않고 서명·검증한다. 사진의 개인키 값은 재사용하지 않는다.
확인 기준서명 검증이 실패하면 키 쌍과 함께 메시지 파일의 실제 바이트를 비교한다.
키 소유 증명과 신원 신뢰를 나눈다
- 서명이 맞다는 것은 해당 공개키에 대응하는 개인키가 사용됐다는 증거다. 그 키가 누구의 것인지는 별도의 신뢰 관계가 필요하다.
- 인증서 체인은 공개키를 이름·용도·기간과 묶는다. 서명 과제와 인증서 검증 도해는 서로 다른 단계의 비교 자료다.
원본 크기로 보기 ↗- 서버 인증서 위에 Intermediate CA와 Root CA가 연결돼 있다.
- 오른쪽에는 서버 이름·유효기간·용도·폐기 상태가 따로 나열되어, 서명 확인만으로 검증이 끝나지 않음을 보여 준다.
확인 기준서명 성공을 곧바로 서버 신뢰 성공으로 보고하지 않는다.
실습에서 확인한 동작 원리
- modulus는 공개키의 한 구성 요소다.
- 서명은 메시지의 정확한 바이트와 키 쌍에 의존한다.
04예제로 따라가기
- 작은 소수: 교육용 p=61, q=53이면 n=3233이고 =60×52=3120이다.
- 지수 선택: e=17, d=2753을 쓰면 17×2753=46801=3120×15+1이므로 역원 관계가 성립한다.
- 메시지 변환: m=65를 교과서 식에 넣으면 c=65^17 mod 3233=2790이다.
- 복원 확인: 2790^2753 mod 3233=65로 원래 대표값을 얻는다. 이는 수학식의 확인이지 안전한 파일 암호화 예제가 아니다.
- OAEP와 차이: 실제 OAEP에서는 동일 평문도 인코딩의 난수 때문에 다른 대표값이 될 수 있다. 위 예에는 그 보호가 없다.
05혼동하기 쉬운 점과 확인 기준
- 키 해석: PEM·DER 컨테이너와 실제 알고리즘·키 길이를 확인한다. 확장자만으로 키인지 인증서인지 판단하지 않는다.
- 스킴 불일치: OAEP 해시·MGF 설정·label이나 PSS 매개변수가 양쪽에서 다르면 같은 키 쌍이어도 검증·복호화가 실패할 수 있다.
- 길이 초과: 암호화의 최대 평문은 모듈러스 바이트 수에서 스킴 오버헤드를 뺀 값이다. 긴 자료는 혼합 암호화 구조로 처리한다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.