비밀번호와 키 인증에 대해 묻는 것이 아닙니다.
나는 SSH에 심각한 취약점이 있더라도 키 인증을 사용하면 이러한 취약점을 덜 취약하게 만들 수 있다고 여러 번 언급한 것을 보았습니다(Amazon AWS에서도). 그런데 키 검증 방식에 취약점이 있다면 어떨까요? 이것은 단지 인증 메커니즘을 기반으로 가정을 하는 것이 아닌가?
왜 그렇게 생각하시나요? 비밀번호가 좋지 않은 인증 형태라는 것을 우리 모두 알고 있기 때문에 단순히 "개인 키를 사용한다"고 가정하는 걸까요?
답변1
소위 말하는거 같은데도전-응답 모델. 이렇게 하면 암호가 유선을 통해 전송되는 경우처럼 잠재적으로 유선을 통해 스니핑될 수 있는 방식으로 키 쌍이 노출되지 않습니다. 따라서 더 안전한 것으로 간주됩니다.
중 하나답변이 보안 SE Q&A 질문은 다음과 같습니다.비밀번호를 저장하는 것보다 공개 키를 사용하여 SSH에 로그인하는 것이 더 낫습니까?공개/개인 키 쌍 사용의 이점을 설명하세요.
발췌
공개 키의 경우 상황은 매우 다릅니다. 이 경우 서버는 사용자의 공개 키를 저장합니다. 다음에 일어나는 일은 서버가 임의의 값(nonce)을 생성하고 공개 키를 사용하여 이를 암호화한 후 사용자에게 보내는 것입니다. 사용자가 원래 사람이라면 그는 챌린지를 해독하고 서버로 다시 보낸 다음 사용자의 신원을 확인할 수 있습니다. 이것이 전형적인 도전-응답 모델이다.
따라서 NONCE를 전송하여 키 쌍을 사용하는 방식을 고려하면 중개자에게는 전혀 알려지지 않으며 키의 공개 부분만 공개됩니다.
정말 의심스러우면 해당 키 쌍 사용을 중단하고 완전히 새로운 키 쌍 세트를 다시 생성할 수 있습니다.
난수란 무엇입니까?
발췌
보안 엔지니어링에서 nonce는 암호화된 통신에서 한 번만 사용되는 숫자입니다. 이는 본질적으로 난수와 유사하므로 이름이 붙었습니다. 이는 일반적으로 재생 공격에서 이전 통신을 재사용할 수 없도록 인증 프로토콜에서 전송되는 임의 또는 의사 난수입니다. 예를 들어 HTTP 다이제스트 액세스 인증에서는 암호의 MD5 다이제스트를 계산하기 위해 난수를 사용합니다. 401 인증 도전 응답 코드가 발생할 때마다 nonce가 달라지므로 재생 공격이 거의 불가능해집니다.
인용하다
답변2
예, SSH의 공개 키 인증 메커니즘은 취약할 수 있습니다. 그러나 비밀번호 또는 시도-응답 인증 메커니즘에도 취약점이 있을 수 있습니다. 따라서 기본적으로 이 요소만으로도 두 인증 방법은 모두 동일한 것으로 간주됩니다.
공개키 인증의 이점
개인 키는 네트워크를 통해 전송되지 않습니다. 서버에는 공개 키가 있으며 해당 공개 키를 사용하여 임의의 데이터를 암호화합니다. 이 데이터는 개인 키로만 해독할 수 있습니다. 암호화된 데이터는 클라이언트로 전송되고, 클라이언트는 이를 해독하여 서버로 다시 보냅니다.
이 데이터에 대한 무차별 대입 크래킹도 불가능합니다. 클라이언트는 한 번만 암호 해독을 시도할 수 있습니다. 실수가 발생한 경우 새로 암호화된 데이터로 다시 시작해야 합니다. 그런 다음 클라이언트가 응답하는 데 몇 초 밖에 걸리지 않는 시간 제한이 있습니다.
공개키 인증의 단점
SSH 개인 키는 비밀번호로 보호될 수 있으며 이는 보안상의 이유로 권장됩니다. 그러나 이것은 필수는 아닙니다.
따라서 클라이언트 시스템이 개인 키 비밀번호로 보호되지 않고 누군가 시스템에 물리적으로 액세스하거나 해당 키의 복사본을 얻은 경우 원격 시스템에 액세스할 수 있습니다.
프록시 키 전달의 단점
클라이언트 시스템에서 "키 에이전트"를 사용하여 SSH 개인 키를 저장하는 것이 가능하며 일반적입니다. SSH 클라이언트가 개인 키를 사용하여 일부 작업을 수행해야 하는 경우 키 에이전트에 요청을 보냅니다.
SSH 연결을 통해 이 키 에이전트에 대한 액세스를 전달하는 것도 일반적이므로 원격 시스템에서 로컬 SSH 키를 사용할 수 있습니다(예를 들어 다른 시스템에 SSH로 연결하려는 경우).
이 작업의 단점예, 원격 시스템이 손상되었거나 다른 사람이 루트 액세스 권한을 갖고 있는 경우 해당 시스템에 연결할 때 SSH 키를 사용할 수 있습니다.
키 전달을 사용하면 SSH 데몬은 SSH 키 에이전트와 통신하기 위해 원격 시스템에 명명된 소켓을 배치합니다. 소켓은 기본 파일 시스템 권한으로 보호되므로 해당 사용자만 액세스할 수 있습니다. 그러나 루트는 원하는 것은 무엇이든 할 수 있고 파일 시스템 권한은 아무 의미가 없으므로 루트 사용자는 소켓에 액세스하고 개인 키를 사용할 수 있습니다.
이것이 그들이 귀하의 개인 키를 가지고 있다는 의미는 아닙니다.단지 그들이 그것을 사용할 수 있다는 것입니다. SSH 키 에이전트는 키 자체를 보내지 않으며 공개 키 인증에 필요한 "이 데이터 암호 해독" 요청에만 응답합니다.