couldn't agree a key exchange algorithm
본문 바로가기

용어 정리, 이슈/과학&기술

couldn't agree a key exchange algorithm

728x90
puTTY를 접속할 일이 생겨 들어가려는 장비의 ip를 치고 접속을 누르자 couldn't agree a key exchange algorithm(키 교환 알고리즘을 허용할 수 없습니다)라는 안내 문구가 떴다. 이게 어떤 오류인지 어떻게 조치해야하는지 알아보고 정리해봤다.

이 글(https://mspproject2023.tistory.com/501)을 참고하자

1. puTTY란?

1-1. puTTY

puTTY 아이콘 (출처 : chiark)

puTTY[퍼티]자유-오픈 소스 단말 에뮬레이터, 직렬 콘솔 및 네트워크 파일 전송 애플리케이션이다. 이 퍼티는 SCP(호스트 간(로컬 혹은 원격) 컴퓨터 파일을 안전하게 전송하는 크로스 플랫폼), 시큐어 셸(SSH, 원격 호스트에 접속하기 위한 암호 네트워크 프로토콜), 텔넷(원격 호스트에 접속하기 위한 암호 네트워크 프로토콜), rlogin(타 호스트에 로그인할 수 있게하는 소프트웨어 유틸리티)와 같은 네트워크 프로토콜을 지원하며 직렬 포트에도 연결 가능하다.

 

쉽게 말해 puTTY는 원격 접속을 돕는 에뮬레이터라고 할 수 있다.

 

puTTY라는 이름에서 TTY는 전신타자기의 상표명인 텔레타입(teletype)에서 유래했으며, 이 TTY는 현재 리눅스에서 사용되는데, 리눅스 장치 드라이브 중에서 콘솔이나 터미널을 가리킬 때 사용한다.

 

퍼티는 원래 마이크로소프트 윈도우즈용으로 작성되었지만, 현재는 다른 운영체제에도 이식(포팅, porting)되어 있다. 공식 포트는 유닉스 계열(Unix-like) 플랫폼에서 사용할 수 있으며, 재공품(在工品, 미완품) 포트는 고전 맥 운영체제(Classic Mac OS)와 맥 운영체제(Mac OS)에서 사용할 수 있고, 비공식 포트는 심비안 운영체제(Symbian), 윈도우 모바일, 윈도우폰(WP)에서 사용가능하다.

 

1-2. puTTY의 역사

1999년 1월 8일, 영국의 컴퓨터 프로그래머 사이먼 타담(Simon Tatham, 1977~)는 마이크로소프트 윈도우 및 유닉스용 시큐어 셸(SSH)과 텔넷의 무료 소프트웨어 구현체 puTTY라는 애플리케이션을 개발했다.

2000년 10월, puTTY 0.50 버전이 발표되었는데, 이 버전부터 SSH-2 클라이언트를 사용할 수 있게 되었다.

 

2002년, puTTY 0.52 버전이 발표되었고, 이 때 SSH-2 공개 키 인증을 처음 사용하기 시작했으며, 도스박스(DOS box) 처럼 전체 화면 모드도 지원하기 시작했다.

 

2017년 7월 8일, DLL 하이잭킹(DLL hijacking, 원래의 DLL파일이 위조된 DLL파일로 대체해 해킹하는 방법) 및 글자 망가짐, 유니코드 키보드 입력 등의 문제를 해결한 puTTY 0.70 버전을 발표했다.

 

2021년 7월 17일, 취약한 SSH 서버에 의한 인증 프롬프트 스푸핑(spoofing, IP 도용)에 대한 추가적인 방어 수단으로 새 구성 옵션을 추가한 puTTY 0.76 버전이 발표되었다.

 

2021년 12월 14일, puTTY 제작진은 Log4j 취약성의 영향을 받지 않는다고 발표했다. 왜냐하면 puTTY는 Log4j 라이브러리와 자바(Java)를 사용하고 있지 않기 때문이다.

 

2. couldn't agree a key exchange algorithm(키 교환 알고리즘을 허용할 수 없습니다)

2-1. 키 교환(키 합의)

PuTTY Fatal Error (출처 : IBM)

원격 접속을 돕는 에뮬레이터인 puTTY를 접속하다 보면 간혹 이런 내용의 치명적인 오류(fatal error)가 뜬다. 이 에러에서의 핵심 단어는 키 교환(key exchange)인데, 이는 암호학적 알고리즘의 사용을 허용해 두 당사자 간에 암호키(cryptographic key)를 교환하는  암호학적 방법을 말한다.

 

예를 들어 보자.

호스트 A가 원격으로 호스트 B에 접속하고 싶어하고, 호스트 B 또한 그러하다. 그런데 호스트 A와 B는 누군가 자신의 컴퓨터에 누가 들어왔는지 확인하지 못한다. 그래서 A와 B는 서로가 누구인지 알 수 있게 끔 하는 비밀키를 교환하려고 한다. 여러 수학적 계산과 암호학적 지식을 사용하여 결국 서로는 같은 비밀키를 공유하게 되는데 이러한 과정을 키 교환이라고 한다. 정보통신기술용어해설에서는 서로의 비밀키를 공유하기 위해 합의를 하는 과정에 집중해 키 교환보다 키 합의(key agreement)가 더 적절한 용어라고 설명한다.

 

이렇게 키 교환에 이르기 위한 각종 단계와 명령어들의 집합키 교환 알고리즘(key exchange algorithm)이라고 한다.

 

2-1. puTTY의 키 교환 알고리즘을 허용할 수 없다고?

puTTY의 키 교환 알고리즘을 허용할 수 없다는 것은 puTTY를 이용해 접속이 가능했던 두 호스트간의 원격 접속이 불가능하다는 말이다. 이렇게 된 이유는 puTTY를 실행한 컴퓨터의 puTTY 혹은 원격 및 로컬 연결을 하려는 호스트의 puTTY 버전이 서로 안맞아서 일어나는 것이다. 이 말은 곧 어느 한 쪽이 puTTY 구버전을 사용하고 있다는 뜻이다.

 

이를 해결하기 위해선 단지 puTTY를 최신 버전으로 업데이트만 해주면 된다!

 

정리해보자.

puTTY는 1999년 개발된 원격 및 로컬 호스트에 대한 접속 및 파일 전송을 돕는 에뮬레이터다. 이 에뮬레이터는 마이크로소프트 윈도우, 유닉스 등에서 사용되고 있으며, 자바나 log4j 라이브러리를 사용하지 않아 해당 시스템에서의 해킹은 안전하다.

puTTY로 연결된 양 호스트 중 하나의 puTTY가 구버전이면 두 개의 호스트가 교환한 암호키가 작동이 되지 않아 '키 교환 알고리즘을 허용할 수 없습니다'라는 오류 메시지가 뜨는데, 이를 해결하기 위해선 구버전 puTTY를 최신 버전으로 업데이트만 해주면 된다. 다시 한 번 업데이트의 중요성을 상기시키는 계기가 되었다.

 

반응형