
세종대학교 공개키암호 hash_rsa 과제
본 내용은
"
세종대학교 공개키암호 hash_rsa 과제
"
의 원문 자료에서 일부 인용된 것입니다.
2024.10.24
문서 내 토픽
-
1. rsa_pks_genkey(key_length)rsa에서 입력되는 키 길이(비트) 즉, p*q=n의 비트에 따라 구성되는 절반 비트인 랜덤 소수 p와 q가 결정된다. p와 q는 서로다른 소수로서, 곱에의해 본래 n의 키 길이가 넘지안도록 n의 절반비트인 값으로 범위를 설정해준다. 이 키의 비트값은 길면 길수록 안전하다. 공개키 pk= [n , e, 해시함수] 에서 e는 gcd(e, pi(n))=1을 만족해야만 하는 값을 결정해야한다. 즉, 비밀키 생성을위해 역수가 존재해야하는 형태를 뜻하고, 12. rsa_pks_hash(m, pk)메시지를 해싱시키기 위한 함수로, 공개키의 해시함수와 메시지를 이용한다. 파이썬의 해시방식은 hashlib모듈을 import하여 sha1함수를 사용하였고 공개키의 pk[2]에 넣어주었었다. 본메시지를 해싱하기위해 문자열형태로 변환해주고, 컴파일러가 코드를 읽을 수 있도록 encode("utf-8")처리를 해준다. 그 후, 공개키의 해싱함수를 통해 16진수 문자열로 변환해주고, Zn*상에 적합하도록 먼저 10진수 정수로 변환 후 2진수 형태 문자열로 다시 변경해준다. 그후 2진수 정수로 변환해주고 mod n 연산을 수행해 해싱처리를 완료한다. Random Oracle Model인 해시 함수를 사용하므써, 랜덤 값변환으로 서명위조 공격을 방지할 수 있다.3. rsa_pks_sign(m, sk, pk)서명하기위한 함수로 본메시지를 2번 과제처럼 해싱후에, 서명작업을 한다. 서명작업은 해싱된 메시지를 비밀키 d 지수승하여 공개키의 modulo n 작업을해준다. 빠른 연산을 위해 이전 과제에 사용하였던 mod_exp함수를 이용해 주었다. sk[2]는 비밀키 d, pk[0]은 p*q = n이다.4. rsa_pks_verify(sig, m, pk)검증을 하기위한 함수로, 서명된 메시지를 공개키 e값을 이용하여 서명이전의 값으로 복호화한다. 이전에 d값으로 서명화하였으므로 역원관계인 e값을 이용하는데, 빠른연산을 위해 mod_exp함수를 사용한다. pk[1]은 e, pk[0]은 n이다. 복호된 값과 본메시지의 해싱값과 비교하여 같다면 1을 반환하고 아니라면 0을 반환하게 된다.5. Textbook-RSA PKS 서명 위조 공격기존의 Textbook-RSA PKS에서 두개의 메시지로 서명화작업으로 원본메시지의 서명값을 알 수 있는 서명위조 공격이 가능했다. 공격자는 공개키 e를 알기 때문에 서명 위조가 가능했다. 따라서 이번 과제는 이 위조 공격을 방지하기 위해 해시 함수추가한 Hashed-RSA PKS를 구현한 것이다.6. Hashed-RSA PKS 서명 위조 방지Hashed-RSA PKS에서는 해시 함수가 random oracle model이기 때문에, 랜덤의 해시값으로 변경할 수 있게 된다. 이를 공개키에 담아 사용하여 기존 위조공격을 실행해 본다면, QUOTE = QUOTE, QUOTE -> QUOTE 으로 성립되지 않아, 해싱의 랜덤특징으로 인해 본메시지에 대한 서명을 위조가 불가능하다.
-
1. rsa_pks_genkey(key_length)RSA PKS(Public Key Signature) 알고리즘에서 rsa_pks_genkey(key_length) 함수는 RSA 키 쌍(공개 키와 개인 키)을 생성하는 역할을 합니다. key_length 매개변수는 RSA 키의 길이를 지정하며, 일반적으로 2048비트 또는 4096비트 길이의 키가 사용됩니다. 이 함수는 RSA 서명 생성 및 검증을 위한 필수적인 요소이며, 안전한 암호화 및 인증을 위해서는 충분한 길이의 키를 사용해야 합니다. 키 길이가 짧으면 암호화 강도가 약해져 공격에 취약해질 수 있으므로, 적절한 키 길이 선택이 중요합니다.
-
2. rsa_pks_hash(m, pk)rsa_pks_hash(m, pk) 함수는 메시지 m을 해시 함수를 사용하여 해시 값으로 변환하고, 공개 키 pk를 이용하여 해시 값을 암호화하는 역할을 합니다. 이 함수는 RSA PKS 서명 생성 과정에서 사용되며, 메시지의 무결성을 보장하고 서명의 크기를 줄이는 데 도움을 줍니다. 해시 함수로는 SHA-256, SHA-384, SHA-512 등의 안전한 알고리즘을 사용해야 하며, 공개 키는 사전에 안전하게 공유되어야 합니다. 이를 통해 메시지 무결성과 인증을 보장할 수 있습니다.
-
3. rsa_pks_sign(m, sk, pk)rsa_pks_sign(m, sk, pk) 함수는 메시지 m, 개인 키 sk, 공개 키 pk를 입력으로 받아 RSA PKS 서명을 생성하는 역할을 합니다. 이 함수는 rsa_pks_hash(m, pk) 함수를 호출하여 메시지 해시 값을 생성하고, 개인 키 sk를 이용하여 해시 값을 암호화합니다. 생성된 서명은 메시지의 무결성과 메시지 발신자의 신원을 보장하는 데 사용됩니다. 안전한 RSA PKS 서명을 위해서는 충분한 길이의 키와 안전한 해시 함수 사용이 필수적입니다.
-
4. rsa_pks_verify(sig, m, pk)rsa_pks_verify(sig, m, pk) 함수는 서명 sig, 메시지 m, 공개 키 pk를 입력으로 받아 RSA PKS 서명의 유효성을 검증하는 역할을 합니다. 이 함수는 먼저 메시지 m을 해시 함수를 사용하여 해시 값으로 변환하고, 공개 키 pk를 이용하여 서명 sig를 복호화합니다. 그리고 복호화된 값과 메시지 해시 값을 비교하여 서명의 유효성을 확인합니다. 이를 통해 메시지의 무결성과 발신자의 신원을 검증할 수 있습니다. 서명 검증 과정에서 안전한 해시 함수와 충분한 길이의 공개 키 사용이 중요합니다.
-
5. Textbook-RSA PKS 서명 위조 공격Textbook-RSA PKS 서명 위조 공격은 RSA PKS 알고리즘의 취약점을 이용한 공격 방식입니다. 이 공격은 RSA 암호화 과정에서 사용되는 단순한 지수 연산만을 이용하여 서명을 위조할 수 있습니다. 이는 Textbook-RSA 알고리즘이 가지고 있는 구조적 취약점으로, 실제 사용되는 RSA PKS 알고리즘에서는 이러한 공격을 방지하기 위해 추가적인 보안 조치가 필요합니다. 예를 들어 PKCS#1 v1.5 또는 PSS(Probabilistic Signature Scheme)와 같은 보안 패딩 기법을 사용하거나, 안전한 해시 함수와 충분한 길이의 키를 사용하는 등의 방법으로 Textbook-RSA PKS 서명 위조 공격을 방지할 수 있습니다.
-
6. Hashed-RSA PKS 서명 위조 방지Hashed-RSA PKS 서명 위조 방지는 Textbook-RSA PKS 서명 위조 공격을 방지하기 위한 방법입니다. Hashed-RSA PKS 방식에서는 메시지를 먼저 안전한 해시 함수를 사용하여 해시 값으로 변환한 후, 이 해시 값을 RSA 개인 키로 암호화하여 서명을 생성합니다. 이렇게 생성된 서명은 메시지의 무결성과 발신자의 신원을 보장하며, Textbook-RSA PKS 방식에 비해 더 강력한 보안성을 제공합니다. 서명 검증 시에도 공개 키를 사용하여 서명을 복호화하고, 이를 메시지 해시 값과 비교함으로써 서명의 유효성을 확인할 수 있습니다. 안전한 해시 함수와 충분한 길이의 키 사용이 Hashed-RSA PKS 서명 위조 방지를 위해 중요합니다.