디피-헬만 키 생성 프로그램(2) - 고민
·
프로그래밍/암호화 프로그램
이제 이전에 만든 RSA 프로그램을 기반으로 만들어보겠다. 간단하게 RSA와 같이 소수를 생성하고 어쩌고저쩌고 하면 되겠구나! 싶었다. 그런데, 예상못한 어려움에 부딪혔다. 랜덤한 소수값은 구할 수 있는데, 그 소수값의 원시근은 어떻게 구할까...? 일단 소수값은 RSA 프로그램에서 했던 것 처럼, 밀러-라빈 소수 판정법을 이용해서 구하면 된다. $$a^{p-1} \equiv 1 \pmod{p}$$ 위의 조건을 갖는 원시근을 찾아야한다. (연산량이 너무 많다...) 그런데.. 열심히 코드를 짜다 보니.... 알게된 것이 있다. 디피헬만의 q(소수) , a(원시근)는 공개된 값이라서 상수로 Fix 해둔 값으로 해도 된다는 것이였다.... 3시간 정도 찾아보고 공부했었는데,,,
디피-헬만 키 생성 프로그램(1) - 이론
·
프로그래밍/암호화 프로그램
오우! RSA 암호화 프로그램을 개발하던 중, 디피 헬만 암호화 프로그램을 구현해 보라는 학교 과제가 생겼다. 먼저, 디피헬만 알고리즘은 이산대수의 복잡성을 보안 기법으로 사용한다. 소수 q와 q의 원시근 a을 사용해서 복잡도가 증가하는데, 키를 만드는 방법은 아래와 같다. (엘리스와 밥으로 예시를 들어서 설명하겠다.) 1. 엘리스는 개인키($X_A$)와 공개키($Y_A$)를 생성한다. $X_A < q$ $Y_A \equiv a^{X_A} \pmod{q}$ 2. 밥은 개인키($X_B$)와 공개키($Y_B$)를 생성한다. $X_B < q$ $Y_B \equiv a^{X_B} \pmod{q}$ 3. 엘리스와 밥은 공개키를 서로 교환한다. 4. 엘리스는 밥의 공개키($Y_B$)로 비밀키($K_A$)를 생성한다..
RSA 암호화 프로그램(2) - encrypt.py, decrypt.py
·
프로그래밍/암호화 프로그램
학교 과제로 개발한 RSA 프로그램이 있으므로, 이것을 개선하는 쪽으로 개발을 진행할 것이다. 코드는 깃허브에 모두 올려져있다. 개발에 참고한 코드는 여기있다. 많은 부분을 카피했다. 파일명은 encript.py이고 내용은 아래와 같다. from argparse import ArgumentParser from util import get_random_prime, get_random_coprime, mod_exp parser = ArgumentParser(description='RSA암호화') parser.add_argument('-f', '--file_path', action="store", dest="file_path", type=str, help="file path", default=None) par..
밀러-라빈 소수 판정법의 검사 반복 횟수는 얼마나 해야할까?
·
프로그래밍/기타
RSA 암호화 프로그램을 만들던 도중, 고민이 생겼다. 소수를 생성할때, 밀러-라빈 소수 판정을 해야 하는데, 몇번 반복해야 하는지를 모르겠다. 그래서 알아보기로 했다. 일반적으로 알고리즘 문제를 풀때는, 다들 대충 이런 공식을 적용하는 것 같다. 검사하는 값이 $2^{32}$보다 작을때 : a값을 [2,7,61]로 함. $2^{64}$보다 작을때 : a값을 [2, 325, 9375, 28178, 450775, 9780504, 1795265022]로 함. 이 숫자는 miller-rabin.appspot.com/ 여기에도 나와있다. 여기까지는 좋다. 근데 만먁 64비트보다 크다면? RSA 알고리즘에 적용할 키 값은 당연히 64보다 커야한다. 2048 정도로 생각하는데, 어떻게 해야할까? 내가 개발할때 참고..
RSA 암호화 프로그램(1) - 이론
·
프로그래밍/암호화 프로그램
이번 포스팅은 RSA 암호화 프로그램을 개발하고자 한다. RSA 암호화 알고리즘은 공개키 암호화 알고리즘으로 개인키와 공개키를 만들어서, 개인키로 암호화를 하면 공개키로만 복호화를 할 수 있고 공개키로 암호화를 하면 개인키로만 복호화를 할 수 있다. 먼저 개인키와 공개키를 만들어보자 (간단하다!) 개인키와 공개키 만들기 1. 소수인 $ p, q $를 무작위로 뽑는다. 2. n을 구한다. $n = p \times q$ 3. 오일러 수를 구한다. $\Phi = (p - 1)(q - 1)$ 4. $\Phi$와 서로소인 정수 $e$를 구한다. 5. $e \times d \pmod{\Phi} = 1$ 인 $d$를 구한다. 여기서 개인키는 $(d, n)$, 공개키는 $(e, n)$이다. 암호화 복호화 개인키를 이용..
[Pygame/오류] Pygame에서 응답없음
·
프로그래밍/기타
whlie문 안에서 뭔가를 그리는 동작을 수행 할 때, 위와 같은 오류가 나온다면 다음과 같은 코드를 while문 안에 넣어주자. for event in pygame.event.get(): if event.type==pygame.QUIT: pygame.quit() sys.exit() 참고 : stackoverflow.com/questions/14720377/pygame-window-hang
[DB/오류] Exception has occurred: TypeError %d format: a number is required, not str
·
프로그래밍/기타
Exception has occurred: TypeError %d format: a number is required, not str Pymysql에서 사용하는 sql에서 %s는 그냥 "여기 파라미터가 들어갑니다." 라는 뜻이다. "string"이 들어간는 말이 아니다. 고로, %d, %f 이런것을 써서도 안된다.
[DB/오류] 1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ~~"
·
프로그래밍/기타
Mysql 쿼리를 보내는 프로그램을 테스트 하다보면, 다음과 같은 오류를 발견하곤 한다. Exception has occurred: ProgrammingError (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '~~~~' 오류의 원인은 sql 쿼리 문법이 틀린 것으로, 따옴표를 붙혀주거나 sql 쿼리를 잘 살펴 보아야 한다. 필자는 아래와 같은 식으로 했다가 아차 싶어서 update A set B = 10 C =10 where D = 1 이렇게 고쳤다. update A set B = 10, C =10..
2jun0
'프로그래밍' 카테고리의 글 목록 (12 Page)