2013-04-02 4 views
0

gitolite를 사용하여 git 서버를 설정하려고하기 때문에 SSH 인증 방법이 어떻게 작동하는지 이해하려고합니다.공개 키와 개인 키를 사용하는 SSH 통신

내가 아는 한 gitolite는 사용자에게 권한을 부여하고 개인적인 쓰기 및 읽기 권한을 가진 특정 저장소에 액세스 권한을 부여하기 위해 ssh를 사용합니다. 하지만 인증이 어떻게 작동하는지 혼란 스럽습니다.

저는 YouTube에서 몇 가지 동영상을 시청했으며 설명하기 위해 색상으로 유추했습니다. 내가 이해한다면 비밀리에 서로 의사 소통하려는 두 사람에게 비밀과 공개 키가 필요하다.

두 사람이 서로 공개 키를 알고 서로 통신하기 위해 하나의 공개 키를 사용하는 것에 동의합니다. 연결을 설정하기 위해 그들은 동일한 공개 키를 사용하여 개인 키를 암호화하고 그 결과를 서로에게 보냅니다. 그들은 결과를 받으면 메시지에 개인 키를 추가하고 같은 메시지를 가진 마법처럼.

하지만 서버가 클라이언트를 확인하는 방법을 볼 수 없기 때문에이 권한을 이해할 수 없다고 생각합니다. 나는 서버가 그와 연결할 클라이언트로부터 공개 키를 보유해야한다는 것을 알고 있지만, 개인 키를 가지고있다.

클라이언트가 서버에 연결하려고하면 공개 키로 암호화 된 개인 키를 보내고 서버는 클라이언트 공개 키를 사용하여 개인 키를 암호화하고 클라이언트에게 보냅니다.

서버가 사용자가 실제로 그 사람인지 어떻게 확인합니까? 또한 공개 키로 암호화 된 정보의 암호를 해독하기 위해 개인 키를 가진 사람 만 메시지를 해독 할 수 있다는 내용을 읽었습니다. 그렇다면 클라이언트 개인 키가없는 경우 서버가 클라이언트가 보내는 메시지의 암호를 해독 할 수있는 방법은 무엇입니까?

공개 키와 개인 키를 사용하여 인증, 권한 부여 및 정보 교환이 어떻게 작동하는지 설명 할 수 있다면 매우 행복 할 것입니다.

답변

4

SSH 작품에 대한 답을 찾기 위해 cryptography course에 오신 것을 환영합니다 대략 다음과 같습니다. 이것은 단순히 높은 수준의 설명 일뿐입니다.

각 당사자는 공개 키와 개인 키라는 두 개의 키를 가지고 있습니다. 공개 키/개인 키는 수학적으로 관련되어있어서 기능적으로 역수입니다. 따라서 한 작업에 의해 수행 된 작업은 다른 작업에 의해서만 취소 될 수 있습니다. 그것은 복잡하지만, x^nnn 대 x의 nnnth 루트를 계산하는 것과 같다고 생각하십시오. 전자는 쉽지만 후자는 어렵 기 때문에 연산을 실행 취소하기에 충분한 정확도로 계산하기가 어렵습니다. 이것은 우리에게 SSH가 다음과 같은 것을 할 수있게 해주는 바람직한 속성을 제공합니다 :

클라이언트가 서버에 연결합니다. 서버는 개인 키로 서명 된 인증서를 제시함으로써 신원을 증명합니다. 클라이언트는 서버의 공용 키를 사용하여 인증서를 해독하고 개인 키가 필요하기 때문에 클라이언트 만 암호화 할 수 있음을 알고 있습니다. 그런 다음 서버는 클라이언트가 제공 한 인증서로 동일한 작업을 수행합니다. 식별은 신뢰할 수있는 제 3자를 사용하여 공개 키를 관리하는 100 % 보증으로 만 수행 할 수 있습니다. 제 3 자 없이는 신원 변경 만 감지 할 수 있습니다.

신원 확인이 끝나면 서버는 대칭 비밀 키를 생성하고 클라이언트의 공개 키를 사용하여 암호화 한 다음 클라이언트 (개인 키가 필요하기 때문에 메시지를 해독 할 수있는 유일한 사람)에게 보냅니다. . 이 시점부터는 클라이언트와 서버 모두 대칭 비밀 키를 가지며 모든 통신은이 키로 암호화됩니다. 이는 대칭 암호화 작업이 비대칭 작업보다 대략 100 배 빠르기 때문에 성능상의 이유로 수행됩니다.

이것은 SSL이 신원을 확인하고 정보를 암호화하는 방법입니다. 더 세분화 된 액세스 제어는 SSL이 아닌 상위 레벨 응용 프로그램 (예 : * nix 파일 사용 권한)에 의해 제공됩니다.

0

이 주제에 대한 설명은 Stackoverflow 형식에 대해 약간 과장합니다.

며칠 전 코 세라는 정확하게 당신이 관심있는 사항을 설명 암호화 (파트 I)에 무료로 과정을 시작했다.

나는 당신의 질문에