ED25519

안녕하세요 Mambo 입니다.

오늘은 보안 관련 기술인 타원곡선 암호 알고리즘을 기반으로 하는 ED25519라는 것에 대해 알아보려고 합니다.

아마존 웹 서비스에서는 2021년 8월 17일부터 EC2 인스턴스 접근을 위해 ED25519 형식의 키로 SSH 연결을 수행할 수 있도록 지원하였으며 2021년 9월 1일에는 깃허브에서도 DSA 형식의 키를 제거하고 ECDSA와 ED25519 형식의 키를 추가하기로 결정하였습니다.

공통으로 언급되고 있는 ED25519라는 것을 모르시는 분이라면 저와 함께 알아보도록 합시다.

ED25519

ED25519(Ed25519)는 ECC(Elliptic Curve Cryptography) 알고리즘으로 수행하도록 구현된 전자서명입니다. 타원곡선 암호 알고리즘을 사용하는 공개키 암호화 방식은 기존의 RSA와 비교해서 동일한 안정성을 가지면서도 상대적으로 더 적은 길이의 키를 가진다고 합니다. 컴퓨터 연산 속도가 발전함에 따라 일반적으로 사용되는 RSA의 권장되는 키 길이가 길어짐으로 인하여 일반 컴퓨터 또는 디바이스에서는 연산 속도가 느려지는 단점을 가지게 되고 상대적으로 작은 키 길이를 사용할 수 있으면서 동일한 안정성을 보여주므로 권장되는 공개키 암호화 방식이라고 할 수 있습니다.

RSA와 비교해서 보안적으로 우수하다고 볼 순 없지만 상대적으로 비교하여 효율적이라는 것을 이해하셔야합니다.

타원 곡선

ED25519는 어떤 타원 곡선을 사용하여 구현된 전자서명일지 궁금해집니다. 다음은 암호화에 적합하다고 판단되어 표준으로 정의된 타원 곡선들입니다.

  • secp256k1
  • secp256r1
  • prime256v1
  • Curve25519

미국 국립표준연구소(NIST) 또는 표준 암호화 그룹(SECG)에서는 효율적인 타원 곡선들에 이름을 부여했습니다. 예를 들어, ECC NIST P-256은 SECG에서 정의한 secp256r1과 prime256v1를 지칭한 것과 같습니다.

표준으로 정의된 다양한 타원 곡선들에 대한 자세한 내용은 다음의 두 문서를 통해 확인할 수 있습니다.

저로서는 이해하기 힘든 부분이라고 생각하여 설명은 생략하며 간단하게 말해서 여러가지 타원 곡선 형태를 도메인 파라미터로 정의하여 이름을 부여한 것 입니다. NIST P-256은 NIST에서 정의한 소수 기반의 타원 곡선 방정식을 말하며 secp256k1는 SECG에서 정의한 Koblitz curve 기반의 타원 곡선 방정식을 말합니다.

비트코인과 이더리움에서도 secp256k1 라는 타원곡선을 사용한다고…

키 교환과 전자 서명

타원 곡선을 사용하여 디피-헬먼 키 교환을 구현한 알고리즘을 ECDH라고 하며 타원 곡선 암호를 사용해서 전자서명 알고리즘(DSA)를 구현한 것을 ECDSA라고 합니다. ECDSA는 지난 SSL 인증서 글에서 TLS 핸드쉐이크 과정에서 ECDHE_ECDSA와 같은 타원 곡선 암호 방식을 사용하는 것을 통해 이미 확인한 개념인데 기억하시는 분이 계실지 모르겠습니다.

타원 곡선 기반의 전자 서명 알고리즘에는 EdDSA도 있으며 Twisted Edwards curveSchnorr 서명 방식을 사용하도록 구현된 DSA 입니다.

X25519 그리고 Ed25519

앞서 언급된 타원 곡선 중 Curve25519는 키 교환 알고리즘인 디피-헬먼과 같이 사용하도록 고안된 타원 곡선입니다. Curve25519를 기반으로하여 ECDH로 키 교환을 수행하는 것을 X25519라고 하게 됩니다. 그리고 Curve25519과 함께 SHA-512와 같은 해시 함수를 사용하는 구현된 EdDSA를 Ed25519라는 이름으로 부르게 됩니다.

  • ECDSA : 타원 곡선 기반의 전자 서명 알고리즘
  • X25519 : Curve25519를 사용하는 타원 곡선 키 교환 알고리즘
  • Ed25519 : Curve25519를 사용하는 타원 곡선 전자 서명 알고리즘

머리속에 정리가 잘 되셨나요?

ED25519 키 페어

지금부터는 ED25519 형식의 키 페어를 만들고 EC2 인스턴스에 접근해보는 것을 따라해보겠습니다.

키 페어 생성하기

먼저, ED25519 형식의 키 페어는 OpenSSH를 통해 만들 수도 있고 아마존 웹 서비스를 통해 ED25519 형식의 키 페어를 생성할 수 있습니다.

2021년 8월 17일 부터는 콘솔을 통해 ED25119 키 페어를 사용하여 EC2 인스턴스 연결이 가능하다고 했는데 우측 제약사항에는 아직 업데이트되지 않은 듯 합니다.

아래와 같이 AWS CLI의 create-key-pair 명령어를 통해서도 ED25519 키 페어를 생성할 수 있습니다.

aws ec2 create-key-pair --key-name mambo --key-type ed25519 --query "KeyMaterial" --output text > aws-mambo.pem
aws ec2 describe-key-pairs
{
    "KeyPairs": [
        {
            "KeyPairId": "###",
            "KeyFingerprint": "###",
            "KeyName": "mambo",
            "KeyType": "ed25519",
            "Tags": []
        }
    ]
}

아마존 웹 서비스에 키 페어가 생성되었으면 VPC에 EC2 인스턴스를 시작할 때 SSH 접속 시 사용될 ED25519 키 페어를 선택할 수 있습니다.

EC2 인스턴스가 실행되었으면 아마존 웹 서비스 콘솔의 EC2 인스턴스 연결 기능을 통해 인스턴스에 접속해보겠습니다.

ED25519 키 페어를 사용해서 EC2 인스턴스 연결에 성공하였습니다. 그런데 말이죠, 아마존 웹 서비스에서 생성된 ED25519 키 페어를 윈도우 10에서 지원하는 SSH 클라이언트에서 사용해보면 잘못된 형식이라고 로그가 출력되고 EC2 인스턴스에 연결할 수 없음을 확인했습니다.

ssh -i "aws-mambo.pem" ec2-user@ec2-3-36-96-111.ap-northeast-2.compute.amazonaws.com

The authenticity of host 'ec2-3-36-96-111.ap-northeast-2.compute.amazonaws.com (3.36.96.111)' can't be established.
ECDSA key fingerprint is SHA256:gvSJ/qfnIlB8bkTE78QY65HO4px3YpoYvsyAv90LsTE.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-3-36-96-111.ap-northeast-2.compute.amazonaws.com,3.36.96.111' (ECDSA) to the list of known hosts.
Load key "aws-mambo.pem": invalid format
ec2-user@ec2-3-36-96-111.ap-northeast-2.compute.amazonaws.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

아마존 웹 서비스가 만들어주는 ED25519 형식의 키 페어를 사용하지 않고 직접 윈도우 10에서 ssh-keygen을 통해 ED25519 형식의 키 페어를 생성하고 아마존 웹 서비스에 퍼블릭 키를 추가하면 정상적으로 EC2 인스턴스 연결할 수 있습니다.

ssh-keygen -t ed25519 -m PEM -f ./mambo.pem

이처럼 아마존 웹 서비스에서 만들어주는 ED25519 형식의 키 페어는 윈도우에서 사용할 수 없기 때문에 주의해야할 것 같습니다.

타원곡선 암호에 대해서 더 자세히 알고 싶다면 다음의 글들을 참고해보시기를 추천드립니다.

감사합니다.

참고