Chinese Remainder Theorem (CRT)
거의 설리번선생님의 설명
연립 합동식의 유일한 해를 찾는 정리이다.
정리
x=Σ1txiDiMi mod n
where Di=n/di,Mi=Di−1 mod di
연습문제
d1=7,d2=13,x1=3,x2=7라면?
풀이
n=d1d2=7⋅13=91
x1=3,D1=91/7=13,M1=13−1mod7=6
x2=7,D2=91/13=7,M2=7−1mod13=2
x=(3⋅13⋅6+7⋅7⋅13)mod91=332mod91=59
연습문제2
연습문제3
CRT 가 어떻게 RSA의 속도를 올리는가
p=179, q=197
n=35263, φ(n)=34888
e=17, d=8209 일때
기존 RSA연산
c=me mod n=16817mod35263=28657
m=cd mod n=286578209 mod 35263 = 168
이면 굉장히 큰 수 (ex)286578209) 에게 mod계산을 해야해서 느리다.
CRT로 쪼개서 계산하자
dp=d mod (p−1)=8209mod178=21
dq=d mod (q−1)=9209mod196=173
c=28657이면
c1=c mod p=28657mod179=17
c2=c mod q=28657mod197=92
c1dp mod p≡1621mod179≡168mod179≡m
c2dq mod p≡9221mod197≡168mod197≡m
Primitive root
정수 a가 있을때 an(mod p) 의 나머지가 모두 0이 아니라면,
이를 Primitive root라고 부른다.
am=n mod p,for1<=n<p
Ex) 3은 Primitive root이다
Elgamal crypt 계산
기본
Y=gx mod p
Y = public key
x = private key (random between 1, p-1)
p = large prime
g = generator (primitive root of Z\*_p)
(p,g) = public parameters
Encryption
- (g,x) 사용하여 Y 계산
Y=gx mod p
- random으로 k를 골라서 K 계산
K=Yk mod p
- M encrypt하여 C(C_1, C_2) 계산
C1=gx mod p
C2 = M X K mod p
Decryption
- C1, x 사용해서 K 계산
C1x(≡gkx≡Yk)≡ K mod p
- C2사용해서 M 복호화
M=C2/Kmod p
Elgamal Examples
Elgamal is >> sementic secure << under Chosen Plain text attack
- adversary가 Z\*_p 에서 mb=(m0,m1)을 고른다.
- adversary인지 모르고, adversary 에게 mb를 암호화한 C를 리턴한다.
C = (C1=gx mod p, C2 = M X K mod p)
- 똑같은 mb 암호화시, diffrent k 가 또 diffrent ciphertext를 produce한다. 그러므로 adversary가 같은 ciphertext를 생성하는 것은 불가능하다.
- 그러므로, adversary는 cannot tell the coreesponding plaintext of C. (mb=m0 or m1?)
- as result, ELGamal cryptosystem is semantic secure.
hashing is required!
receiver는 C가 조작되었는지, 모를 수 있다. -> 해싱 필요!
C2에 해쉬패딩을 붙임으로서, receiver는 modifed되었는지, detect 가능
C 전달시, C2=Yk⋅m∣∣H(m) mod p 로 전달
for long message
만약 Block으로 Split시, 매번 다른 K를 choose해야!!
Elgamal Digital Signature
변수
- private key : x
- public key : y = gx mod p
Signing
1. random k를 골라서, r 계산
r = gx mod p
2. m 계산
m=xr+ks mod (p−1)
(x를 모르고는, s를 계산해내기 힘들다)
3. signature = (r,s)
Verification
1. receive한 것 = m, r, s
2. signature 체크한다.
gm=yrrs mod p 인지.
- gm=yrrs mod p 과정
yrrs mod p
=gxr⋅gks mod p
=gxr+ks mod p
=gm mod p
possible attack
Elgamal Digital Signature + HASH
변수
- private key : x
- public key : y = gx mod p
Signing
1. random k를 골라서, r 계산
r = gx mod p
2. m 계산하고 Hash씌우기
m=xr+ks mod (p−1)
(x를 모르고는, s를 계산해내기 힘들다)
H(m)
3. signature = (r,s)
Verification
1. receive한 것 = m, r, s
2. m에 Hash 씌우기
m -> H(m)
3. signature 체크한다.
gH(m)=yrrs mod p 인지.