개념 사전 · 개념

RSA

Rivest Shamir Adleman

는 큰 정수의 모듈러 거듭제곱을 사용하는 공개키 기술이다. 교과서의 정수 연산을 실제 암호화·서명으로 쓰려면 같은 스킴과 엄격한 입력 검증이 필요하다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 공개키와 개인키의 계산 관계를 이용한다.
  • 암호화와 에서 서로 다른 스킴을 사용한다.
  • 대칭키 기술과 결합해 큰 데이터 처리와 신원 증명을 분담한다.

02어떤 순서로 동작하나

  1. 모듈러스

    서로 다른 소수 p·q로 n=pq를 만들며 공개키는 n·e를 포함한다. p·q를 알면 비밀 지수 계산에 필요한 구조가 드러난다.

  2. 역원 조건

    교과서 예에서 gcd(e,)=1인 e를 고르고 ed≡1 mod 을 만족하는 d를 사용한다.

  3. 입력 범위

    기본 연산은 0≤m<n인 정수 대표값을 처리한다. 임의 길이 파일을 그대로 한 정수 연산에 넣는 구조가 아니다.

  4. 스킴의 역할

    OAEP는 메시지·난수·해시·길이 조건을 인코딩하고, PSS는 서명용 인코딩을 정한다. 두 스킴을 교환해 쓸 수 없다.

  5. 키 길이의 한계

    작은 정수는 계산 원리만 설명한다. 실제 안전성은 충분한 강도와 검증된 구현·난수·오류 처리까지 요구한다.

03먼저 알아둘 용어와 구성요소

두 소수의 곱으로 만드는 연산의 법.
공개키에 포함되는 지수.
적절한 모듈러 역원 관계를 만족하는 비밀 지수.
각각 암호화와 서명을 위한 인코딩·검증 스킴.
암호화에 메시지 길이·난수·해시를 포함한 인코딩을 결합하는 스킴.
서명에 확률적 인코딩을 결합하는 스킴.
서로 다른 소수 p·q의 곱에 대해 (p−1)(q−1)이 되는 오일러 함수 값.
LEARN THROUGH PRACTICE

RSA 과제의 modulus와 서명 입력 바이트 읽기

modulus를 공개키 전체와 혼동하지 않고, 공개키 추출·서명·검증을 서로 다른 작업으로 구분한다.

실습 구성과 전제

  • 의 교육용 키 또는 자신이 만든 폐기 가능한 실습 키만 사용한다.
  • 작업 폴더에 키와 메시지를 분리해 저장하고 실제 운영 개인키는 가져오지 않는다.
  1. 과제가 요구하는 값을 구분한다

    • 공개키에는 과 가 필요하다. modulus의 16진수 문자열만 저장한 파일은 일반적인 PEM 공개키 파일이 아니다.
    • 문제는 modulus 문자열을 구한 다음 그 문자열에 서명하라고 요청한다. 키를 암호화하는 작업이나 modulus 자체를 공개키 인증서로 바꾸는 작업이 아니다.
    shell
    openssl rsa -in lab-private.pem -modulus -noout
    openssl pkey -in lab-private.pem -pubout -out lab-public.pem

    자신의 폐기 가능한 실습 키에서 modulus를 조회하고 공개키를 추출한다.

    WebGoat RSA 키 과제원본 크기로 보기 ↗
    • 화면은 개인 RSA 키를 교육용 입력으로 주고 modulus의 16진수 표현과 서명을 각각 요구한다.
    • BEGIN PRIVATE KEY 표시는 PEM 컨테이너의 시작이며, 답안 입력칸 두 개는 서로 다른 결과물을 받는다.
    확인 기준

    n만 추출한 파일과 공개키 PEM 파일을 이름부터 다르게 관리한다.

  2. 서명할 메시지의 바이트를 고정한다

    • 과제가 정한 16진수 대소문자·접두사·개행 포함 여부를 먼저 확인한다. 보이는 글자가 같아도 마지막 LF가 있으면 해시 입력이 달라진다.
    • 서명은 개인키로 수행하고 검증은 공개키로 수행한다. 는 생성된 서명 바이트를 답안에 넣기 쉬운 문자열로 바꾸는 표현이다.
    shell
    openssl dgst -sha256 -sign lab-private.pem -out signature.bin message.txt
    openssl dgst -sha256 -verify lab-public.pem -signature signature.bin message.txt

    메시지 파일을 중간에 수정하지 않고 서명·검증한다. 사진의 개인키 값은 재사용하지 않는다.

    확인 기준

    서명 검증이 실패하면 키 쌍과 함께 메시지 파일의 실제 바이트를 비교한다.

  3. 키 소유 증명과 신원 신뢰를 나눈다

    • 서명이 맞다는 것은 해당 공개키에 대응하는 개인키가 사용됐다는 증거다. 그 키가 누구의 것인지는 별도의 신뢰 관계가 필요하다.
    • 인증서 체인은 공개키를 이름·용도·기간과 묶는다. 서명 과제와 인증서 검증 도해는 서로 다른 단계의 비교 자료다.
    인증서 체인 · 인증서 체인은 왜 필요한가원본 크기로 보기 ↗
    • 서버 인증서 위에 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상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.