디피헬만, RSA 키교환

declspec의 이미지

디피헬만은 SSH 등에서 대칭키를 공유하기위해 쓰는 알고리즘입니다
그런데 RSA 로도 할수있지 않나요?

A 와 B 가 대칭키를 공유하고싶을때.

1. A 가 임의의 대칭키 생성
2. A 가 B 의 공개키로 대칭키를 암호화하여 B 에게 전송
3. B 는 자신의 비밀키로 대칭키 확인.
4. 대칭키가 공유되었음.

이렇게 대칭키를 공유하는거랑
디피헬만알고리즘으로 공유하는거랑
어떤차이가 있나요?
왜 대부분 디피헬만을 쓰나요?

wariua의 이미지

말씀하신 4단계를 통해 RSA 방식으로 비밀키 공유가 가능하다면 DH에서는 어떤 단계가 필요할까요? 둘 사이를 비교해보면 바로 차이를 아실 것 같은데요. :-)

$PWD `date`

declspec의 이미지

디피헬만은 먼저 공개된 두 소수 g, n 을 정하고
1. A, B 각자가 자신의 비밀번호 생성.
2. A 는 자신의 비밀번호와 g, n 으로 어떤 값 Ay 생성
3. B 도 마찬가지로 By 생성
4. 각자 상대방에게 받은 Ay, By 값과 자신의 비밀번호로 어떤 연산을 하면 동일한 숫자가 나옴
5. 그 동일한 숫자를 대칭키로 씀.

뭐 이렇게 놓고 차이라한다면
디피헬만은 A, B 둘중 한명이 비밀키를 정할필요가 없다는점...
수학적으로 자세힌 모르겠지만 공개키,비공개키랑 연산이 뭔가 다르다는점...
글쎄요? ㅠㅠ 알려주세요

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

snowall의 이미지

RSA를 쓰는 경우에는 전송을 받는 상대방이 위장하고 있으면 털리겠죠

디피헬만을 쓴다면 적어도 전송을 받은 상대방은 g, n을 아는 사람이라는 뜻이겠네요

피할 수 있을때 즐겨라! http://melotopia.net/b

snowall의 이미지

아, 죄송. 반대로 적었네요.

A가 위장해서 B에게 보내는 경우가 문제가 됩니다. B가 키를 받았는데 그게 자기가 원한 사람인지 아닌지 따로 확인해야 한다는 거죠.

피할 수 있을때 즐겨라! http://melotopia.net/b

cheongpark의 이미지

디피헬먼을 쓰는 이유는 RSA등 asymmetric algorithm,은 Public Key Infrastructure(PKI)가 깔려있다는 전제하에 사용이 가능하기 때문입니다.

물론 처음부터 RSA를 쓸수 있다면 좋겠지만 송신자가 수신자의 Public Key를 얻기 위한 수고가 필요하기 때문에 좀더 편리한 Diffie-Hellman을 쓰는거죠.

보안적인 측면에서는 RSA로 키를 교환하는게 더 안전합니다.

wariua의 이미지

주말 사이에 다른 분들이 설명을 해 주셨네요. 괜히 다시 써보자면...

DH에서는 상대의 공개키를 사전에 입수해 두는 과정이 필요치 않습니다. 그 대신 알고리즘 수행 후 공유키를 만들었다고 해도 상대가 정말 내가 의도한 상대인지 알 방도가 없습니다. 따라서 상대에 대한 인증이 필요한 경우 적절한 과정을 따로 수행해야 합니다.

$PWD `date`

declspec의 이미지

많이 도움되었습니다~

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

지나가던TLS학생의 이미지

위에 사람들 때문에 DH, RSA 개념 헷갈리고 잘못 이해하고 종일 고생했습니다.
인터넷 정보는 믿을게 안됩니다. 책이랑 RFC 문서 참고하세요.
아는척 하지좀 맙시다 제발좀

지나가던 직장인의 이미지

dh는 (ssl에서 사용하는)rsa를 이용한 키 교환과 가장 큰 차이는 shared key의 전송 유무입니다
rsa는 애초부터 비대칭 암/복호 및 sign이 주요 기능이라고 할수 있고. dh는 애초부터 키 교환을 위한 알고리즘 입니다
아무리 뛰어난 암호화 기법을 사용한다 해도 키를 전송해야 한다면 동일한 조건에서 실제 키 전송없이 shared key를 만들수 있는 방식에 비해 좋다고 할수는
없을 것입니다 (dh는 각자의 public key만 전송하므로써 각자의 shared key 생성이 가능합니다)

자세한 것은 다른 자료들을 보시기 바랍니다

그리고 애초부터 제3자를 통한 인증이 없다면 rsa/dh와 무관하게 mitm에 다 털립니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.