μ•ˆλ…•ν•˜μ„Έμš” 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 curve와 Schnorr μ„œλͺ… 방식을 μ‚¬μš©ν•˜λ„λ‘ κ΅¬ν˜„λœ 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 ν˜•μ‹μ˜ ν‚€ νŽ˜μ–΄λŠ” μœˆλ„μš°μ—μ„œ μ‚¬μš©ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μ£Όμ˜ν•΄μ•Όν•  것 κ°™μŠ΅λ‹ˆλ‹€.

타원곑선 μ•”ν˜Έμ— λŒ€ν•΄μ„œ 더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄ λ‹€μŒμ˜ 글듀을 μ°Έκ³ ν•΄λ³΄μ‹œκΈ°λ₯Ό μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

μ°Έκ³