본문으로 바로 가기

때때로 SSH의 공개 키 인증 시스템을 설정하는 방법을 설명할 때, RSA 키와 DSA 키 중 어느 것이 더 나은지 묻는 질문을 받곤 합니다. 다음 몇 단락에서 그 질문에 답해 보려 합니다. 먼저, 이더넷 LAN과 TCP/IP 네트워킹에 대해서는 어느 정도 전문 지식을 갖추고 있지만, 암호학에 대해서는 기껏해야 아마추어 수준의 이해도를 가지고 있다는 점을 밝히고 논의를 시작하겠습니다. 다음 내용은 인터넷 조사를 바탕으로 한 것이며, 일부 내용은 상충되기도 하고, 인터넷상의 모든 정보가 그렇듯 링크마다 신뢰도가 제각각입니다.

먼저, RSA 키와 DSA 키란 무엇인가요?

DSA(Digital Signature Algorithm)는 NSA가 디지털 서명을 위해 설계한 미국 정부 표준입니다. 이는 ElGamal 서명 알고리즘에서 파생되었습니다. 보안은 특정 유형의 로그 함수를 풀기 어려운 점에 기반을 두고 있습니다. 이 알고리즘은 디지털 서명 용도로만 사용할 수 있습니다.

RSA는 이 알고리즘을 최초로 발표한 저자들인 론 리베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)의 이니셜에서 유래한 이름입니다. 이 알고리즘은 큰 수를 인수분해하는 것이 어렵다는 점에 기반을 두고 있습니다. DSA와 달리 RSA는 메시지 전체를 암호화하는 데 사용할 수 있습니다.

제가 알기로는 로그 문제와 인수분해 문제가 똑같이 어렵다고 생각하지만, 로그 문제가 더 어렵다고 주장하는 참고문헌도 몇 가지 발견했습니다(반대로 둘이 똑같이 어렵다고 하는 참고문헌도 발견했습니다).

제가 별로 중요하지 않다고 생각하지만, 여러분이 이미 들어보셨거나 앞으로 듣게 될 수도 있는 것들:

  1. DSA는 서명 단계에서 RSA보다 빠르지만, RSA는 검증 단계에서 더 빠릅니다. 인증에는 두 단계가 모두 필요하기 때문에 이 차이는 큰 의미가 없습니다.
  2. 앞서 언급했듯이 DSA는 인증 용도로만 사용할 수 있는 반면, RSA는 인증과 메시지 암호화 모두에 사용할 수 있습니다. 하지만 SSH는 키를 인증 용도로만 사용하므로, 이 차이점은 다시 말해 중요하지 않습니다.
  3. 동일한 키 길이의 경우, DSA는 더 작은 서명 파일을 생성합니다. 하지만 각 키가 디스크 블록 하나를 차지하게 되므로, 이 역시 큰 문제가 되지 않습니다.
  4. DSA 키는 원래 1024비트로 제한되었으나, 이제는 그렇지 않습니다.
  5. “National Vulnerability Database”에서 “key and DSA”와 “key and RSA”를 검색한 결과, DSA 키와 관련된 취약점 2건과 RSA 키와 관련된 취약점 5건이 확인되었습니다. 제가 파악한 바로는, 이러한 취약점들은 모두 OpenSSL/OpenSSH의 최신 릴리스에서 해결되었으며, 현재 OpenVOS용 인터넷 보안 팩(Internet Security Pack)의 일부로 포함되어 있습니다.

DSA의 장점:

  1. DSA는 SSH 프로토콜 2에서만 사용할 수 있는 반면, RSA는 프로토콜 1과 2 모두에서 사용할 수 있습니다( “SSH 2” 대 “OpenSSL 및 OpenSSH 릴리스 2” 참조). 프로토콜 1에는 몇 가지 중대한 설계상의 결함이 있어 프로토콜 버전 2로 대체되었습니다. 저는 이를 DSA 키 사용을 약간 더 선호하는 이유로 보고 있습니다. 이는 구식 프로토콜을 사용하는 것을 방지하는 일종의 내장된 보호 장치라고 할 수 있습니다.

RSA의 장점:

  1. 잘못된 난수 생성기는 DSA 키 비트를 유출할 수 있습니다(어떻게 되는지는 묻지 마세요).
  2. openssh.org 웹사이트는 어느 쪽이 더 나은지에 대해서는 별다른 언급이 없는 듯하지만, ssh-keygen의 최신 버전에서는 키 유형을 명시하지 않으면 RSA 키가 생성됩니다.
  3. RSA 키를 언급하는 RFC가 DSA 키를 언급하는 것보다 더 많고(그리고 더 최신인) 것으로 보입니다.

몇 가지 비교 결과 (파일 크기에는 키에 포함되지 않은 텍스트가 포함되어 있습니다):

DSA 생성 시간 RSA 생성 시간 DSA 바이트 RSA 바이트 DSA.pub 바이트 RSA.pub 바이트
1024비트   1초   1초   736   951   610  230
2048비트   8초   2초  1264  1743  1122  402
4096비트  50초  25초  2304  3311  2146  742

 

어떤 키를 사용하든 간에, 정말 중요한 것은 키의 길이입니다. 현재 상황을 고려할 때, 키 길이는 2048비트를 권장합니다. 지금은 과한 것처럼 보일지 모르지만, 5년 후에도 여전히 그렇게 보일지는 장담할 수 없습니다.

어떤 종류의 키를 사용할지에 관해서는, 저는 RSA 키를 선택하는 편이 낫다고 봅니다.

© 2024 Stratus Technologies.