before get in...
sender는 public key, receiver는 private key를 가진다.
public key
private key
특징
known hard problem : "trapdoor function"
RSA의 수학적 배경
RSA cryptosystem
RSA digital signature
RSA cryptanalysis
Fermat's Theorem
where p is prime and gcd(a,p) = 1
also,
Euler's Theorem
for any a, n where gcd(a,n)=1
(소수일때) / (소수 p*q로 이루어졌을때)
RSA포함 많은 cyptographic algorithm들은 very large prime numbers를 랜덤으로 고르는 경우가 많다.
"there are infinitely many primes"
n이하의 prime number 몇개나 있을까?
보다 작은 prime num의 갯수
주어진 p가 prime인지 판단하는법
이 성립하면 p는 소수, 성립하지 않으면 소수가 아님
a는 p보다 작은 random num을 많이 골라서, 테스트해본다.
- 공식성립 = probabily prime
- 공식성립 X = not prime
예시)
n=221은 소수인가?
1<a<221 사이에서 a를 ranomly pick.
a = 38일때,
221은 prime num일수도 있다
a = 26일때,
221은 prime이 아니다
Miller-Rabin algorithm
odd integer n>2가 있을때,
n-1 은 로 표현될 수 있다.
단, k>0이며 q는 odd 이다.
prime num과 공식 합칠 시 prime num test
n이 prime num인지 확인하려면 , 두가지 확인해야
- 조건1) 1 mod n
- 조건2) =-1 mod n = n-1 mod n
(단, q는 홀수, k>0이다.)- 조건1O OR 조건2O = probably prime
- 조건1X OR 조건2X = not a prime
도출과정
mod n
-> mod n
-> = 0 mod n
miller labin algorithm 활용한 소수 검사 코드
# repeat for primality testing!
MILLER-RABIN(n):
1. Find integers k>0, q odd, so that n-1 = (2^k)q
2. Select a random integer a, 1 < a < n-1
3. if a^q mod n = 1, then return 'probably prime'
4. for j = 0 to k-1 do
if a^{{2^j}q}mod n = n-1, then return 'probabily prime
5. return 'composite' // not prime
예시
😊 generating RSA keys
public key : (n, e)
private key : (n, d)
Encryption : mod
Decryption : mod
(m = plaintext, c = ciphertext)
example
위의 그림처럼 m(메세지)이 n보다 작은 들로 쪼개졌을때 efficiency problem 발생
symmetric 과의 비교
|encryption algorithm|speed|shared secret key|
|---|---|---|
|symmetric ex)AES|FAST|YES (need sharing a secret key in advance)|
|RSA|SLOW(100~1000배정도 느려서, 짧은 크기의 message encryption에 주로 쓰임)|NO (only need receiver's public key)|
길이에 따라 AES와 섞어쓰자 !
message sender는 message(m)와 함께 signature()를 보낸다!
receiver는 이를 verify 할 수 있다!