Physicist, Programmer. What you eat, how you think, and most importantly what you have done become who you are. Who are you? and who will you be?
[IT/Programming]/Algorithm/Database
RSA 암호가 Big brother (국가기관 및 최상위 계급층들) 들에게 쉽게 깨지는 이유. (보안이 안되는 이유.) - And 그 보완책으로서의 개인적인 solution 제안 (Hash with salt multiple times and reduce the number of hashing).
kipid2024. 8. 29. 09:35
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