RSA를 Javascript로 구현해보았다.
1. p, q 아주 큰 소수
2. n = p*q
3. φ(n) 오일러 피 함수(n 과 서로소인 1부터 n까지 정수의 개수)
4. φ(n) 값을 (p-1)(q-1)을 통해 구한 후, 1<e<φ(n)인 e 구하기
>>구현 중!
5. (e*d) mod(φ(n)) = 1 만족하는 d 구하기
/**
* 21.09.05 JE
* RSA 구현
* 1. p, q 아주 큰 소수
* 2. n = p*q
* 3. φ(n) 오일러 피 함수(n 과 서로소인 1부터 n까지 정수의 개수)
* 4. φ(n) 값을 (p-1)(q-1)을 통해 구한 후, 1 < e < φ(n)인 e 구하기
* 5. (e*d) mod(φ(n)) = 1 만족하는 d 구하기
*/
//1 ~ 256 까지의 소수
//+ 소수 분류하는 함수로 추가하기!
const primeNum =
[2, 3, 5, 7, 9, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 79, 83, 89,
97, 101, 103, 107, 109, 113, 127, 131, 137,
149, 151, 157, 163, 173, 179, 181, 193, 197,
199, 211, 223, 227, 229, 233, 239, 241, 251];
//변수 초기화
//다중 반환값을 구하기 위해 객체로 설정하였다.
let num = {
p : 0,
q : 0
}
let index_p, index_q = 0;
let ep = 0;
let pubKey = {
n : 0,
e : 0
}
let privKey = {
n : 0,
d : 0
}
//primeNum 배열에서 서로 다른 p, q 뽑기
let pqGen = () => {
index_p = Math.floor(Math.random()*primeNum.length);
index_q = Math.floor(Math.random()*primeNum.length);
if(index_p != index_q){
num.p = primeNum[index_p];
num.q = primeNum[index_q];
console.log('p', num.p, 'q', num.q);
}
return num
}
//n 생성
let numGen = () => {
pqGen();
n = num.p * num.q;
console.log('n', n);
return n
}
//Euler's phi
let eulerPhi = () => {
pqGen();
ep = (num.p - 1)*(num.q - 1);
console.log('ep', ep);
return ep
}
//e 생성 ep보다 작으면서 ep와 서로소 관계인 임의의 정수
//서로소: 공약수가 1 밖에 없는 관계
let pubGen = () => {
eulerPhi();
let dum = 0;
// while(pubKey.e != 0){
// dum = Math.floor(Math.random()*ep + 1);
// if()
// }
}
//서로소 확인하는 함수
let coprime = (a, b) => {
let gcd = 1;
for(let i = 0; )
}
'암호학' 카테고리의 다른 글
21.12.11 암호 공격 (0) | 2021.12.11 |
---|---|
21.10.01 MPC & SMPC [정리 중!] (0) | 2021.10.01 |
21.09.05 RSA 알고리즘 (0) | 2021.09.05 |
21.08.10 생일 공격 (0) | 2021.08.12 |
21.06.26 key (0) | 2021.06.30 |