본문 바로가기

[IT/Programming]/Algorithm/Database

RSA 암호가 Big brother (국가기관 및 최상위 계급층들) 들에게 쉽게 깨지는 이유. (보안이 안되는 이유.) - And 그 보완책으로서의 개인적인 solution 제안 (Hash with salt multiple times and reduce the number of hashing).

728x90
반응형
# RSA 암호가 Big brother (국가기관 및 최상위 계급층들) 들에게 쉽게 깨지는 이유. (보안이 안되는 이유.) - And 그 보완책으로서의 개인적인 solution 제안 (Hash with salt multiple times and reduce the number of hashing). 큰 수의 소인수 분해가 어렵다는 것을 이용한 것이 RSA 암호인데, 애초에 소수를 찾는 것 부터 시작해서 두 소수의 곱을 알아내고 소수에 대한 정보는 지운다는게 핵심인데... 잘 생각해보면 소수에 대한 정보를 절대 안지울거라는걸 알 수 있음. 그냥 Hash Rainbow Table 로 두 소수의 곱셈 = A, B 의 곱 이라고 만들어 놓으면 어떠한 두 큰 소수의 곱도 어떻게 소인수 분해 해야 하는지 order(1) 만에 알 수 있음. 그래서 난 RSA 암호체계를 안믿음. 그냥 일반 사람들이 해킹하기 조금 어렵다 뿐. 두 소수의 곱을 모두 데이터화 한 국가나 최상위 계층 (대기업 CEO 등) 에게는 너무나 손쉬운 해킹임. 양자컴퓨터 쇼어 알고리즘으로도 쉽게 깨지기도 함. 격자구조 basis 이용한 암호화 연구중이라던데... 빨리 RSA 대체가 나왔으면 함. ## PH
  • 2023-09-21 : First posting.
## TOC ## Rainbow Hash Table 예제 ``` CREATE TABLE `rainbowTablePrimes` ( `num_as_hex_text` text NOT NULL , `prime0` text NOT NULL , `prime1` text NOT NULL , PRIMARY KEY (`num_as_hex_text`) ```/ `num_as_hex_text` 에 두 큰 소수의 곱을 저장해 두고, 이 곱셈이 된 수가 어느 두 소수의 곱인지 `prime0` 와 `prime1` 에 저장해 놓는다. 꽤나 큰 수들이기 때문에 bigint 도 감당 못할거라서 hex_text 형식으로 16진수로 표현된 숫자를 text 로 저장해 놓는다. 아무리 큰 두 소수의 곱이라고 해도, PRIMARY KEY 를 이용해 hash function 을 돌리면 Order(1) 만에 특정 큰 수가 어떤 두 수의 곱셈인지 바로 알아낼 수 있다. 그래서 RSA 암호 시스템이 이런 Rainbow Table 을 가지고 있는 국가기관이나 대기업들에 의해 쉽게 깨질 수 밖에 없다는 것. ### 예제 소수 (Prime number): 300000016289 = '0x45d964f7a1', 700000015807 = '0xa2fb4095bf' compoasso.free.fr :: Online prime numbers list 두 소수의 곱: 210000016144400257480223 = '0x2c781fa9e78fb9b5761f' ``` SELECT * FROM `rainbowTablePrimes` WHERE `num_as_hex_text` = '2c781fa9e78fb9b5761f'; ```/ 하면 Order(1) 만에 두 소수 (300000016289 = '0x45d964f7a1', 700000015807 = '0xa2fb4095bf') 를 알아낼 수 있음. ## 보완책 by kipid 이에 대한 보완책으로 개인적으로 생각해 낸 방법을 공유하고자 함. (조금 천천히 정리할 예정. 다른 일들로 바빠서 =ㅂ=;;;) ``` encrypt(password, salt, nOfIteration) ```/ ## RRA
  1. Wiki :: RSA 암호
  2. 나무위키 :: 쇼어 알고리즘 (양자 컴퓨터)
728x90
반응형