PromleeBlog
sitemap
aboutMe

posting thumbnail
RSA 암호화
RSA Encryption

📅

🚀

RSA 암호화 개요 (Overview of RSA Encryption) 🔗

N은 두 소수 p, q의 곱이다. 즉, N=pqN = p * q이다.
그 후, 주요 문제는 p와 q를 찾는 것이다.

🚀

RSA: 키 생성 (RSA: Key Generation) 🔗

  1. 두 개의 소수를 선택합니다. 이 두 소수를 p와 q라고 한다.
  2. N=pqN = p * q를 계산합니다.
  3. ϕ(N)=(p1)(q1)\phi(N) = (p-1) * (q-1)를 계산합니다. ϕ(N)\phi(N)은 N과 서로소인 수의 개수를 의미함
    오일러 파이 함수
  4. ee를 선택합니다. 1<e<ϕ(N)1 < e < \phi(N)이며, eeϕ(N)\phi(N)은 서로소여야 함.
  5. dd를 계산합니다. ddde1(modϕ(N))d * e \equiv 1 \pmod{\phi(N)}을 만족하는 수이다.
    확장된 유클리드 알고리즘을 사용하여 계산
  6. 공개키 pk=(N,e)pk=(N, e)이며, 개인키 sk=dsk=d이다.
➡️

정리 (RSA 키 생성) 🔗


🚀

RSA: 암호화 & 복호화 (RSA: Encryption & Decryption) 🔗

암호화 🔗

공개 키 pk=(N,e)pk = (N, e)와 평문 MZNM \in \mathbb{Z}_N이 주어졌을 때,
C:=RSA.Enc(pk,M)=Me (mod N)C := RSA.Enc(pk, M) = M^e \ (\text{mod} \ N) 를 계산하고 CC를 출력한다.

복호화 🔗

개인 키 sk=dsk = d와 암호문 CZNC \in \mathbb{Z}_N이 주어졌을 때,
M:=RSA.Dec(sk,C)=Cd (mod N)M' := RSA.Dec(sk, C) = C^d \ (\text{mod} \ N) 를 계산하고 MM'를 출력한다.
➡️

정리 (RSA 암호화 & 복호화) 🔗


🚀

RSA의 정확성 (Correctness of RSA) 🔗

공개 키 암호화 PKE는 다음이 성립할 때 정확하다고 한다. 보안 파라미터 λ와 모든 평문 M에 대해,
Dec(sk,Enc(pk,M))=MDec(sk, Enc(pk, M)) = M
여기서 (pk, sk)는 KeyGen(λ)의 출력이다.


RSA의 정확성
:
M=RSA.Dec(sk,RSA.Enc(pk,M))M' = RSA.Dec(sk, RSA.Enc(pk, M))
=Cd=(Me)d=Med=Msϕ(N)+1modN= C^d = (M^e)^d = M^{ed} = M^{s\phi(N) + 1} \mod N
(여기서 sssϕ(N)+11modϕ(N)s\phi(N) + 1 \equiv 1 \mod \phi(N)을 만족하는 정수이다.)
=(Mϕ(N))sM=M(오일러 정리)= (M^{\phi(N)})^s \cdot M = M (\because \text{오일러 정리})

예시 (RSA 암호화 & 복호화 예시) 🔗

키 생성
  1. p=13,q=17p = 13, q = 17
  2. N=13×17=221N = 13 \times 17 = 221
  3. ϕ(N)=(131)(171)=12×16=192\phi(N) = (13 - 1)(17 - 1) = 12 \times 16 = 192
  4. e=5e = 5
  5. d=77d = 77 (즉, 5×77=385=1mod1925 \times 77 = 385 = 1 \mod 192)
암호화
복호화
➡️

정리 (RSA의 정확성) 🔗


🚀

RSA: 빠른 암호화 (RSA: Fast Encryption) 🔗

👨‍💻
C:=RSA.Enc(pk,M)=MemodNC := RSA.Enc(pk, M) = M^e \mod N
eeee의 이진 문자열곱셈 횟수
311₂2
1710001₂5
(2^16 + 1)10000 0000 0001₂17

복호화의 빠른 속도를 위한 방법
➡️

정리 (RSA의 빠른 암호화, 복호화) 🔗


🚀

CRT를 이용한 RSA 복호화 (RSA Decryption using CRT) 🔗

이전 예제에서의 복호화
N=221N = 221, p=13p = 13, q=17q = 17, d=77d = 77, C=22C = 22
따라서 M=Cd=2277=(2211)7=6111=3M' = C^d = 22^{77} = (22^{11})^{7} = 61^{11} = 3 (mod 221)
중국인의 나머지 정리를 사용한 복호화
dp=dmod(p1)dp=77mod12=5d_p = d \mod (p-1) \rightarrow d_p = 77 \mod 12 = 5
dq=dmod(q1)dq=77mod16=13d_q = d \mod (q-1) \rightarrow d_q = 77 \mod 16 = 13
Cdp=CdpmodpCdp=225mod13=3C_{d_p} = C^{d_p} \mod p \rightarrow C_{d_p} = 22^5 \mod 13 = 3
Cdq=CdqmodqCdq=2213mod17=3C_{d_q} = C^{d_q} \mod q \rightarrow C_{d_q} = 22^{13} \mod 17 = 3
중국인의 나머지 정리를 사용하여
Mp=171=10(mod13)M_p = 17^{-1} = 10 \pmod{13}
Mq=131=4(mod17)M_q = 13^{-1} = 4 \pmod{17}
➡️

정리 (CRT를 이용한 RSA 복호화) 🔗


🚀

RSA의 안정성 (Security of RSA) 🔗

안정성 1: 인수 분해 문제 (Factorization Problem) 🔗

안정성 2: RSA 문제 (RSA Problem) 🔗


🚀

최적 비대칭 암호화 패딩 (Optimal Asymmetric Encryption Padding, OAEP) 🔗

RSA-OAEP는 RSA 암호화에 사용되는 패딩 방법 중 하나이다.
RSA-OAEP는 RSA 암호화의 보안성을 높이기 위해 개발된 방법으로, 무작위성과 해시 함수를 사용하여 패딩을 적용한다.
ss
ss
  1. kM2H2k - |M| -2|H| - 2의 길이를 가진 문자열 PS(Padding String) 생성
  2. 연결 - DB(Data Block) = Hash(L)    PS    0x01    M\text{Hash}(L)\; ||\; PS\; ||\; 0x01\; ||\; M
  3. H|H|의 길이를 가진 무작위 바이트 문자열 Seed 생성
  4. dbMask = MGF(Seed,kH1)\text{MGF}(Seed, k - |H| - 1)
  5. MaskedDB = DB \oplus dbMask
  6. SeedMask = MGF(dbMask,H)\text{MGF}(dbMask, |H|)
  7. MaskedSeed = Seed \oplus SeedMask
  8. EM(Encoded Message) = 0x00    MaskedSeed    MaskedDB0x00 \;||\; MaskedSeed\; ||\; MaskedDB