SSH 서버와 클라이언트에서 세션 키와 공개/개인 키는 어떻게 생성되고 사용됩니까?

SSH 서버와 클라이언트에서 세션 키와 공개/개인 키는 어떻게 생성되고 사용됩니까?

SSH 핸드셰이크 프로세스에서 설명됨http://www.cathaycenturies.com/blog/?p=1635

키 교환

  1. 클라이언트에는 공개 키와 개인 키 쌍이 있습니다. 서버에는 공개 키와 개인 키 쌍이 있습니다.
  2. 클라이언트와 서버는 공개 키를 교환합니다.
  3. 이제 클라이언트는 서버의 공개 키뿐만 아니라 자체 키 쌍을 갖게 됩니다.
  4. 이제 서버에는 클라이언트의 공개 키뿐만 아니라 자체 키 쌍도 있습니다.
  5. 이 키 교환은 보안되지 않은 네트워크를 통해 수행됩니다.
  6. 클라이언트는 개인 키와 서버의 공개 키를 가져와 수학 방정식을 통해 전달하여 공유 비밀(세션 키)을 생성합니다.
  7. 서버는 개인 키와 클라이언트의 공개 키를 가져와 수학 방정식을 통해 전달하여 공유 비밀(세션 키)을 생성합니다. 두 사람이 공유하는 비밀은 똑같습니다! 이는 비대칭 키입니다.
  8. 이 암호화된 터널은 다음 단계인 사용자 인증을 포함하여 나머지 세션에 사용됩니다.
  1. 서버와 클라이언트 간의 공개 키 교환은 변경될 때까지 모든 후속 세션에 대해 한 번 수행됩니까?

  2. 세션 키는 클라이언트와 서버 모두에서 세션당 한 번씩 생성됩니까?

    생성될 때마다 개인 키와 공개 키를 입력으로 사용합니다. 이는 개인 키와 공개 키가 동일하게 유지되는 한 세션 키가 다른 세션에서도 동일하다는 것을 의미합니까?

  3. 동일한 세션의 서버와 클라이언트에서 생성된 세션 키가 "동일"하다고 인용문에서 말하는 이유는 무엇입니까?

  4. 글머리 기호 8은 세션 키 생성 후에 사용자 인증이 발생한다고 말하는 것 같나요?

    그렇다면 사용자 인증은 클라이언트와 서버에서 생성된 세션 키를 사용합니까, 아니면 클라이언트와 서버의 공개 및 개인 키만 사용합니까?

그런데 프로세스 작동 방식과 서버 및 클라이언트에서 공개 및 개인 키와 세션 키를 사용하는 방법에 대한 참조가 있습니까?

감사해요.

답변1

  1. 서버와 클라이언트 간의 공개 키 교환은 변경될 때까지 모든 후속 세션에 대해 한 번 수행됩니까?

예. 키가 교환될 때마다 키 교환을 위한 키가 변경됩니다.

  1. 세션 키는 클라이언트와 서버 모두에서 세션당 한 번씩 생성됩니까?

예. 많은 양의 데이터를 전송하지 않으면 세션이 충분히 오래 지속되거나 강제로 키를 다시 입력하거나 필요한 것보다 더 자주 키를 다시 생성하도록 구성할 수 있습니다. RekeyLimit서버 및 클라이언트 구성의 옵션입니다.

생성될 때마다 개인 키와 공개 키를 입력으로 사용합니다. 이는 개인 키와 공개 키가 동일하게 유지되는 한 세션 키가 다른 세션에서도 동일하다는 것을 의미합니까?

위와 같이. 이러한 키는 키 교환을 위해서만 생성됩니다. 이전 질문에서 설명한 인증 키나 호스트 키가 아닙니다.

  1. 동일한 세션의 서버와 클라이언트에서 생성된 세션 키가 "동일"하다고 인용문에서 말하는 이유는 무엇입니까?

이것이 키 교환의 요점입니다. 나는 그것을 설명하는 아래 이미지를 정말 좋아합니다.위키피디아). 이는 각 개인 키에 대한 지식을 기반으로 독립적으로 생성되지만 네트워크를 통해 전송되는 데이터(공개 키)로는 이 공유 비밀을 구성하기에 충분하지 않습니다.

  1. 글머리 기호 8은 세션 키 생성 후에 사용자 인증이 발생한다고 말하는 것 같나요?

그렇다면 사용자 인증은 클라이언트와 서버에서 생성된 세션 키를 사용합니까, 아니면 클라이언트와 서버의 공개 및 개인 키만 사용합니까?

습관. 세션 키는 네트워크의 채널을 암호화하는 데 사용됩니다. 요점은 키가 교환되기 전에는 네트워크를 통해 전송되는 데이터가 안전하지 않으며 누구나 데이터를 가로채거나 수정하거나 삽입할 수 있다는 것입니다. 키 교환 후 데이터는 비밀번호를 사용하여 암호화되고 MAC을 사용하여 "인증"됩니다.

SSH 프로토콜에 대한 많은 정보가 있습니다. OpenSSH 프로젝트에는 전용페이지SSH 프로토콜 구현을 위한 모든 표준(RFC)을 준수합니다. 아마도 가장 중요한 것은RFC4253. openssh의 소스 코드에도 많은 설명이 나와 있습니다.

Diffie-Hellman 키 교환 시각화

더 명확하게 만들었 으면 좋았을 텐데요. 빠진 것이 있으면 알려주시기 바랍니다.

관련 정보