암호학

21.09.05 RSA [작성 중!]

슈팅스타제제 2021. 9. 6. 01:35

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