워게임/CryptoHack

[Cryptohack] General (CERTainly not, SSH Keys)

  • -

CERTainly not

 

문제 및 설명

앞선 문제에서 언급한 대로, PEM은 DER로 인코딩된 ASN.1 위에 멋진 포장지입니다. 경우에 따라서는 DER 파일을 직접 만날 수 있습니다. 예를 들어, 많은 Windows 유틸리티는 기본적으로 DER 파일로 작업하는 것을 선호합니다. 그러나 다른 도구들은 PEM 형식을 기대하며 DER 파일을 가져오는 데 어려움을 겪을 수 있으므로 한 형식을 다른 형식으로 변환하는 방법을 알고 있는 것이 좋습니다.

SSL 인증서는 현대 웹의 중요한 부분으로, 암호화 키를 조직에 대한 세부 정보와 결합시킵니다. TLS 카테고리에서 이에 대해 자세히 다룰 것입니다. 여기에 제시된 것은 DER로 인코딩된 x509 RSA 인증서입니다. 
인증서의 모듈러스(modulus)를 찾아서, 답을 10진수로 제시하세요.

풀이

더보기
from Crypto.PublicKey import RSA

print(RSA.importKey(open('2048b-rsa-example-cert_3220bd92e30015fe4fbeb84a755e7ca5.der', 'rb').read()).n)

 

RSA.importKey를 사용하여 이를 읽으면 10진수의 값이 나온다.

답은 위 숫자이다.

SSH Keys

문제 및 설명

SSH(보안 셸 프로토콜)는 암호화를 사용하여 보안이 약한 네트워크(즉, 인터넷)를 통해 안전한 채널을 확립하는 네트워크 프로토콜입니다. SSH는 개발자와 시스템 관리자가 세계 어느 곳에서든 서버에 명령을 실행할 수 있게 해줍니다. 비밀번호가 가로채지거나 데이터가 도난당하지 않고 작업할 수 있습니다. 따라서 웹의 보안에 매우 중요합니다.

옛날에는 시스템 관리자들이 telnet을 사용하여 서버에 로그인했습니다. 이는 socket.cryptohack.org에 연결하는 대화형 도전과 유사하게 작동합니다. 데이터가 원격 서버로 전송되고 전송된 내용에 따라 작업이 수행됩니다. 전송 암호화가 없으므로 네트워크를 듣고 있는 누구나(예: WiFi 액세스 포인트 소유자, ISP, NSA) telnet 트래픽을 볼 수 있습니다.

인터넷이 점점 적대적인 환경이 되면서 관리 네트워크 트래픽에 대한 인증과 암호화의 필요성이 인식되었습니다. 1995년에 처음 출시된 SSH는 이러한 목표를 달성하고 포트 포워딩, X11 포워딩, SFTP(안전한 파일 전송 프로토콜)와 같은 고급 기능이 소프트웨어에 내장되어 있습니다. SSH는 클라이언트-서버 아키텍처를 사용하며, 서버는 항상 온라인이며 연결을 받을 준비가 된 SSH 서비스 데몬을 실행하고 사용자는 SSH 클라이언트를 실행하여 연결을 만듭니다.

대부분의 경우 SSH는 인증을 위해 공개-개인 키 쌍을 사용하도록 구성됩니다. 서버에는 사용자의 공개 키의 사본이 저장되고, 사용자의 개인 키는 로컬 노트북에 저장됩니다.

이제 브루스가 사용자 계정인 bschneier로 bruces-server에 연결하려고 합시다. 노트북에서 ssh bschneier@bruces-server를 실행합니다. SSH 클라이언트는 SSH 데몬이 듣고 있는 포트 22로 서버에 연결을 엽니다. 먼저 사용할 암호화 알고리즘을 합의한 다음 Diffie-Hellman 키 교환을 사용하여 연결을 암호화하는 세션 키가 설정됩니다(이에 대한 자세한 내용은 다루지 않을 것입니다). 그런 다음 서버는 브루스의 공개 키로 암호화된 임의의 도전 메시지를 보냅니다. 브루스는 개인 키를 사용하여 도전 메시지를 복호화하고 임의의 도전 메시지의 해시를 보내어 올바른 개인 키를 소유하고 있음을 증명하여 bschneier로 서버에 인증합니다. 이제 서버는 브루스에게 명령을 실행할 수 있는 셸을 제공합니다. 공개-개인 키 암호화가 아직 이해되지 않는다면 걱정하지 마세요. RSA 범주에서 상세히 다룰 것입니다.

SSH 개인 키는 "Privacy-Enhanced Mail" 도전에서 논의한 PEM 형식으로 저장됩니다. 따라서 다음과 같이 브루스의 노트북에 /home/bschneier/.ssh/id_rsa 경로에 저장되어 있습니다:

-----BEGIN RSA PRIVATE KEY-----
MIIBCgKC... (대량의 base64)
-----END RSA PRIVATE KEY-----

그러나 SSH 공개 키는 다른 형식을 사용합니다:

ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABgQCtPLqba+GFvDHdFVs1Vvdk56cKqqw5cdomlu034666UsoFIqkig8H5kNsNefSpaR/iU7G0ZKCiWRRuAbTsuHN+Cz526XhQvzgKTBkTGYXdF/WdG/6/umou3Z0+wJvTZgvEmeEclvitBrPZkzhAK1M5ypgNR4p8scJplTgSSb84Ckqul/Dj/Sh+fwo6sU3S3j92qc27BVGChpQiGwjjut4CkHauzQA/gKCBIiLyzoFcLEHhjOBOEErnvrRPWCIAJhALkwV2rUbD4g1IWa7QI2q3nB0nlnjPnjjwaR7TpH4gy2NSIYNDdC1PZ8reBaFnGTXgzhQ2t0ROBNb+ZDgH8Fy+KTG+gEakpu20bRqB86NN6frDLOkZ9x3w32tJtqqrJTALy4Oi3MW0XPO61UBT133VNqAbNYGE2gx+mXBVOezbsY46C/V2fmxBJJKY/SFNs8wOVOHKwqRH0GI5VsG1YZClX3fqk8GDJYREaoyoL3HKQt1Ue/ZW7TlPRYzAoIB62C0= bschneier@facts

이 형식을 사용하여 이러한 공개 키를 서버의 파일 /home/bschneier/.ssh/authorized_keys에 한 줄로 추가하는 것이 더 쉽습니다. 이 공개 키를 파일에 추가하면 해당 개인 키를 사용하여 서버에 인증할 수 있습니다.

ssh-keygen 명령은 이러한 공개-개인 키 쌍을 생성하는 데 사용됩니다.

브루스의 SSH 공개 키에서 모듈러스 n을 10진수로 추출하세요.

풀이

더보기
from Crypto.PublicKey import RSA

print(RSA.importKey(open('bruce_rsa_6e7ecd53b443a97013397b1a1ea30e14.pub', 'rb').read()).n)

답은 위 숫자이다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.