๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๊ฐ“์ƒ ์ง์žฅ์ธ ๋‚จ๋ฐ”์˜ค
Published 2023. 3. 17. 22:58
[RSA] code Security

๋ฌธ์ œ

HOMEWORK01

Bob์˜ RSA ๊ณต๊ฐœํ‚ค (e,n)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ฑ๋ถ„์„ ๊ฐ€์ง„๋‹ค.
e=65537
n=179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430652885096550381956977355009744407642308411545070379136134645709973060633048727107215362312651042098054062317216389604359801702614666769905641776363676873830995947

์œ„ ์ •๋ณด๋งŒ์„ ์ด์šฉํ•˜์—ฌ Bob์˜ ๊ณต๊ฐœํ‚ค๋กœ ๊ฒ€์ฆ์— ์„ฑ๊ณตํ•˜๋„๋ก ์ž์‹ ์˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ์„œ๋ช… s๋ฅผ ์ƒ์„ฑํ•˜๋ผ.
์ฆ‰, Sagecell (https://sagecell.sagemath.org/)์„ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ฆ ์‹œ ์ž์‹ ์˜ ์ด๋ฆ„์ด ๋‚˜์™€์•ผ ํ•œ๋‹ค(์•„๋ž˜ ์ œ์ถœ ๋ฐฉ๋ฒ• ์ฐธ์กฐ).


๊ณผ์ œ๋Š” ๋‹ค๋ฆ„๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ email(dechiffreur.y@gmail.com)๋กœ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค
๊ณผ์ œ๋Š” 7์›” 23์ผ 23:59:59 ๊นŒ์ง€ ์˜จ ๊ฒƒ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

1) ๋ฉ”์ผ์ œ๋ชฉ์€ ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ : [BOB11]๊ณต๊ฐœํ‚ค์•”ํ˜ธ๊ตฌํ˜„HW01_์ด๋ฆ„
2) ๋ฉ”์ผ ๋‚ด์šฉ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. (๋ณต๋ถ™ํ•ด์„œ ๋ฉ˜ํ‹ฐ์˜ ์ด๋ฆ„์ด ๋‚˜์™€์•ผ ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค)
--
s = ์ž์‹ ์˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ „์ž์„œ๋ช…(์ •์ˆ˜๊ฐ’)
e = 65537
n = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430652885096550381956977355009744407642308411545070379136134645709973060633048727107215362312651042098054062317216389604359801702614666769905641776363676873830995947
mprime = pow(s,e,n)
bytes.fromhex(hex(mprime)[2:]).decode('utf-8')
--

 

CODE 

import math
from unicodedata import decimal
import Crypto
from Crypto.Util.number import bytes_to_long, inverse

e = 65537
n = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430652885096550381956977355009744407642308411545070379136134645709973060633048727107215362312651042098054062317216389604359801702614666769905641776363676873830995947
def RSA(n):
    p_tmp = math.isqrt(n)
    if ((p_tmp) % 2) == 0:
        p_tmp = (p_tmp + 1)
        for i in range(100000):
            if ((n % p_tmp) == 0):
                return p_tmp
            else:
                p_tmp = p_tmp + 2
                
    else:
        for i in range(1,1000000):
            if ((n % p_tmp) == 0):  
                return p_tmp
            else:
                p_tmp = p_tmp + 2
                
p = RSA(n)
q = int(n//p)
pi = (p-1)*(q-1) 
d = pow(e,-1,pi)
print('d', d)        
v = bytes_to_long("๋‚จํ˜„๊ฒฝ".encode())
s = pow(v,d,n)
print('s', s)
mprime = pow(s, e, n)
print(bytes.fromhex(hex(mprime)[2:]).decode('utf-8'))
profile

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๊ฐ“์ƒ ์ง์žฅ์ธ ๋‚จ๋ฐ”์˜ค

@๋‚จ๋ฐ”์˜ค