문제

일부 데이터 암호화 대 일부 데이터 서명 (RSA 사용)의 차이점은 무엇입니까?

단순히 공공-민간 열쇠의 역할을 뒤집는가?

예를 들어, 개인 키를 사용하여 메시지를 생성하고 싶습니다. 나는 내 공개 키가 메시지를 읽는 데 사용되기를 원하며 누가 메시지를 읽는 지 신경 쓰지 않습니다. 특정 정보를 암호화하여 소프트웨어의 제품 키로 사용할 수 있기를 원합니다. 나는 이것을 생성 할 수있는 유일한 사람이라는 것을 걱정합니다. 키의 서명을 해독/읽기 위해 내 소프트웨어에 공개 키를 포함시키고 싶습니다. 나는 누가 키에서 데이터를 읽을 수 있는지 신경 쓰지 않고, 나는 그것들을 생성 할 수있는 유일한 검증 가능한 사람이라는 것을 걱정합니다.

이 시나리오에서 서명이 유용합니까?

도움이 되었습니까?

해결책

암호화 할 때 사용합니다 그들의 공개 키 메시지를 작성하고 사용합니다 그들의 개인 키 읽으려면.

서명 할 때 사용합니다 개인 키 메시지의 서명을 작성하고 사용합니다 당신의 공개 키 그것이 정말로 당신의 것인지 확인합니다.

개인 키를 사용하여 메시지를 생성하고 싶습니다.

나는 내 공개 키가 메시지를 읽는 데 사용되기를 원하며 누가 그들을 읽는 지 신경 쓰지 않는다.

이것은 서명, 그것은 당신의 개인 키로 이루어집니다.

특정 정보를 암호화하여 소프트웨어의 제품 키로 사용할 수 있기를 원합니다.

나는 이것을 생성 할 수있는 유일한 사람이라는 것을 걱정합니다.

자신에게만 알아야한다면이 작업을 수행하기 위해 열쇠를 엉망으로 만들 필요가 없습니다. 임의의 데이터 만 생성하여 데이터베이스에 보관할 수 있습니다.

그러나 사람들이 키가 실제로 당신의 것이라는 것을 알기를 원한다면, 임의의 데이터를 생성하고 데이터베이스를 유지하고 키로 서명해야합니다.

키의 서명을 해독/읽기 위해 내 소프트웨어에 공개 키를 포함시키고 싶습니다.

Verisign 또는 Thawte와 같은 상업용 제공 업체로부터 공개 키에 대한 인증서를 구매해야 할 것입니다. 그래서 사람들은 아무도 소프트웨어를 위조하지 않았고 공개 키를 자신의 공개 키로 교체하지 않았는지 확인할 수 있습니다.

다른 팁

RSA Crypto에서 키 쌍을 생성 할 때 공개 키가되기로 선택한 것은 완전히 임의적이며 개인 키입니다. 하나로 암호화하면 다른 방향으로 작동합니다.

따라서 메시지와 함께 메시지를 암호화 할 수있는 방법을 보는 것은 상당히 간단합니다. 수신자의 공개 키, 수신기가 와로 해독 할 수 있도록 사적인 열쇠.

서명은 서명자가 공개 키와 일치하는 개인 키가 있다는 증거입니다. 이렇게하려면 해당 발신자의 메시지를 암호화하는 것으로 충분할 것입니다. 개인 키, 일반 텍스트 버전과 함께 암호화 된 버전을 포함시킵니다. 발신자를 확인하려면 암호화 된 버전을 해독하고 일반 텍스트와 동일한지 확인하십시오.

물론 이것은 귀하의 메시지가 비밀이 아니라는 것을 의미합니다. 공개 키가 잘 알려져 있기 때문에 누구나 해독 할 수 있습니다. 그러나 그렇게 할 때, 그들은 암호 텍스트의 제작자가 해당 개인 키를 가지고 있음을 증명했습니다.

그러나 이것은 전송 크기 (일반 텍스트 및 암호 텍스트)를 함께 두 배로 늘리는 것을 의미합니다 (서명을 확인하는 데 관심이없는 사람들이 메시지를 읽기를 원한다고 가정). 대신, 일반적으로 서명은 해시시 일반 텍스트의. 가짜 해시를 만들 수없는 것이 중요하므로 SHA-2와 같은 암호화 해시 알고리즘이 사용됩니다.

그래서:

  • 서명을 생성하려면 일반 텍스트에서 해시를 만들고 개인 키로 암호화하고 일반 텍스트와 함께 포함하십시오.
  • 서명을 확인하려면 일반 텍스트에서 해시를 만들고 발신자의 공개 키로 서명을 해독하고 두 해시가 동일한지 확인하십시오.

네, 데이터에 서명하는 것이 다른 사람이없는 자신의 왁스 스탬프를 제공한다고 생각하십시오. 달성하기 위해 이루어집니다 무결성과 비 반복. 암호화는 아무도 데이터를 볼 수 없습니다. 이것은 달성하기 위해 수행됩니다 기밀성. Wikipedia를 참조하십시오 http://en.wikipedia.org/wiki/information_security#key_concepts

서명은 개인 키를 사용하여 서명 된 메시지의 해시입니다.

서명은 공개 키로 확인할 수있는 개인 키로 "해시"를 생성합니다. 텍스트는 명확하게 전송됩니다.

암호화는 수신기의 공개 키를 사용하여 데이터를 암호화합니다. 디코딩은 개인 키로 수행됩니다.

따라서 키 사용은 반전되지 않습니다 (그렇지 않으면 개인 키는 더 이상 비공개가 아닙니다!).

안전한 의사 소통을 설정하는 데 두 가지 뚜렷하지만 밀접한 관련 문제가 있습니다.

  1. 승인 된 사람 만 해독하여 읽을 수 있도록 데이터를 암호화합니다.
  2. 발신자의 신원/인증을 확인하십시오.

이 두 가지 문제는 공개 키 암호화를 사용하여 우아하게 해결할 수 있습니다.

I. 데이터의 암호화 및 암호 해독

앨리스는 아무도 읽을 수없는 밥에게 메시지를 보내고 싶어합니다.

  • Alice는 Bob의 공개 키로 메시지를 암호화하여 보냅니다.
  • Bob은 메시지를 받고 개인 키를 사용하여 해독합니다.

A가 B에 메시지를 보내려면 A가 B의 공개 키 (누구나 공개적으로 제공되는)를 사용해야하며 A의 공개 또는 개인 키가 여기에 나오지 않습니다.

그래서 당신이 나에게 메시지를 보내려면 당신은 내가 당신에게 제공하는 나의 공개 키를 알고 사용해야하며, 해당 개인 키에 액세스 할 수있는 유일한 사람이기 때문에 메시지를 해독 할 수 있습니다.

II. 발신자의 신원 확인 (인증)

앨리스는 밥에게 메시지를 다시 보내고 싶어합니다. 위의 방법을 사용하여 데이터 암호화 문제가 해결됩니다.

그러나 내가 앨리스와 밥 사이에 앉아 밥에게 '앨리스'로 자신을 소개하고 앨리스가 보낸 사람을 전달하는 대신 밥에게 내 메시지를 보냅니다. Alice가 보낸 원본 메시지를 해독하고 읽을 수는 없지만 (Bob의 개인 키에 액세스해야 함) 나는 그들 사이의 전체 대화를 납치하고 있습니다.

Bob이 자신이 받고있는 메시지가 실제로 Alice가 보냈다는 것을 확인할 수있는 방법이 있습니까?

  • 앨리스는 개인 키로 메시지에 서명하고 보냅니다. (실제로 서명 된 것은 메시지의 해시, 예를 들어 SHA-256 또는 SHA-512입니다.)
  • Bob은 그것을 받고 Alice의 공개 키를 사용하여 확인합니다. Alice의 공개 키가 메시지를 성공적으로 확인했기 때문에 Bob 은이 메시지에 Alice가 메시지를 서명했다고 결론을 내릴 수 있습니다.

서명은 귀하가 실제로 서명 된 개체의 소스 또는 보증임을 나타냅니다. 그러나 모두가 대상을 읽을 수 있습니다.

암호화는 해당 개인 키를 가진 사람들만이 읽을 수 있음을 의미하지만 서명하지 않으면 암호화 된 객체 뒤에 있다는 보장이 없습니다.

공개 키 암호화에서 서명이 어떻게 그리고 왜 사용되는지 정확하게 설명하고 있습니다. 다른 사람이 제공하는 Aritary 메시지에 서명 (또는 암호화)하는 것은 매우 위험합니다.이를 통해 키를 손상시킬 수있는 알고리즘에 대한 공격이 가능합니다.

시나리오에서는 비대칭 암호화의 의미를 암호화하지 않습니다. 차라리 "Encode"라고 부르고 싶습니다.

따라서 데이터를 이진 표현으로 인코딩 한 다음 개인 키에 서명합니다. 공개 키를 통해 서명을 확인할 수없는 경우 서명 된 데이터가 개인 키로 생성되지 않았다는 것을 알고 있습니다. ( "확인"이 부호되지 않은 데이터가 의미가 없음을 의미합니다)

기능적으로 공개/개인 키 암호화를 사용하여 수신자 만 메시지를 읽을 수 있는지 확인합니다. 메시지가 암호화 된 다음 수신자의 공개 키를 사용하여 암호화됩니다.

수신자에게 메시지를 생성했으며 전송 중에 변경되지 않았습니다. 메시지 서명은 자신의 개인 키를 사용하여 수행됩니다.

사용 된 알고리즘의 경우 : 여기에는 프라임 숫자가 포함됩니다. 더 나은 설명을 위해 Google에서 검색 할 것입니다.

일부 데이터 암호화 대 일부 데이터 서명 (RSA 사용)의 차이점은 무엇입니까?

암호화는 메시지의 기밀성 ( "일부 데이터")을 보존하지만 서명은 비 반복을 제공합니다. 즉, 서명 한 엔티티 만 서명 할 수 있습니다. 기능적 차이도 있습니다. 읽어.

단순히 공공-민간 열쇠의 역할을 뒤집는가?

절대적으로하지. 서명에 동일한 개인 키 사용 및 암호 해독 (또는 마찬가지로, 동일한 공개 키와 검증 및 암호화) 목적을 혼합해서는 안되므로 눈살을 찌푸립니다. 이것은 그다지 수학적 문제가 아니지만 (RSA는 여전히 안전해야 함) 핵심 관리, 예를 들어 서명 키가 더 짧은 라이브를 가져야하고 사용하기 전에 더 많은 보호 기능을 포함해야합니다.

동일한 메시지의 경우, 서명을 위해 Senders Private 키를 사용하고 수신자 신뢰할 수있는 공개 키를 암호화해야합니다. 일반적으로 사인 암호화는 사용됩니다. 그렇지 않으면 대적은 서명을 자신의 것으로 바꿀 수 있습니다. 마찬가지로 해독 및 해독에 수신기의 개인 키를 사용해야합니다 신뢰할 수 있습니다 확인을위한 발신자의 공개 키.

또한 서명 생성은 "개인 키와 암호화"를 사용하지 않는다는 것을 이해해야합니다. 모든 RSA 작업은 모듈 식 지수를 기반으로하지만 패딩 방식은 서명 생성에 대해 완전히 다릅니다. 또한 공개 키는 RSA의 모든 실질적인 사용에서 RSA 개인 키와 완전히 다른 속성을 가지고 있습니다.

예를 들어, 개인 키를 사용하여 메시지를 생성하고 싶습니다.

그것은 부패하지 않은 부동산이며, 서명으로 달성 할 수 있습니다.

나는 내 공개 키가 메시지를 읽는 데 사용되기를 원하며 누가 메시지를 읽는 지 신경 쓰지 않습니다.

공개 키는 모두에게 알려져야합니다. 모든 사람이 메시지를 읽기를 원한다면 단순히 메시지를 암호화하지 않습니다.

서명은 일반적으로 메시지의 내용에 영향을 미치지 않습니다. 메시지는 서명과 분리 된 것으로 간주됩니다. 공식적으로 그러한 서명은 "부록이있는 서명"으로 알려져 있습니다. 여기서 부록은 메시지입니다. 메시지가 서명보다 더 중요한 것으로 간주되므로 약간 이상한 이름입니다. 서명이 거의 없음 (부분) 메시지 복구; 그들은 더 이상 많이 사용되지 않으며 일반적으로 감가 상각 된 것으로 간주됩니다.

CMS와 같은 서명 프로토콜은 컨테이너 형식 여기에는 메시지와 서명이 모두 포함됩니다. 이 경우 일반 .zip 아카이브에서 파일을 삭제하는 것과 매우 유사한 컨테이너에서 (아직 암호화되지 않은 - 메시지를 먼저 가져와야합니다. 따라서 메시지는 View에서 숨겨 질 수 있으며이 경우 직접 사용할 수 없습니다.

특정 정보를 암호화하여 소프트웨어의 제품 키로 사용할 수 있기를 원합니다. 나는 이것을 생성 할 수있는 유일한 사람이라는 것을 걱정합니다.

암호화는 기밀을 달성하는 데 사용됩니다. 과거에 RSA 서명 생성은 종종 "개인 키와의 암호화"로 생각되었다. 그러나 작업은 위에서 설명한 것과는 상당히 다르며 이후 표준은 필사적으로 암호화 및 서명 생성을 시도하고 분리하려고합니다.

키의 서명을 해독/읽기 위해 내 소프트웨어에 공개 키를 포함시키고 싶습니다. 나는 누가 키에서 데이터를 읽을 수 있는지 신경 쓰지 않고, 나는 그것들을 생성 할 수있는 유일한 검증 가능한 사람이라는 것을 걱정합니다.

예, 이것을 설정이라고합니다 신뢰하다 공개 키에서. 그러나 프로그램 코드를 보호하는 것은 메시지 보호와는 매우 다릅니다. 당신은 공연 할 수 있습니다 코드 서명 그러나 서명을 확인하기 위해 무언가가 필요합니다 코드 외부. 이를 제공하는 운영 체제가 있습니다.

예를 들어 Microsoft Authenticode가 있습니다. Istore 및 Android App Store와 같은 응용 프로그램 상점은 코드 서명을 사용하거나 사용하지 않을 수도 있지만 응용 프로그램이 클로닝되지 않았거나 최소한 상점 내에서 복제되지 않았다는 확신을 제공합니다. 암호화가 항상 해결책은 아닙니다.

코드를 복제 / 변경하는 것을 막는 것 조금도 훨씬 더 어렵고, 그렇게하면 DRM 영역에서 견고하게 될 것입니다.

이 시나리오에서 서명이 유용합니까?

네 그럼요. 공개 키에 대한 신뢰가있는 경우 메시지가 귀하 만 서명한지 확인하는 데 도움이 될 수 있습니다. 그것이 당신의 인증에 도움이 될 수 있다면 응용 프로그램 코드 / 통합 공개 키 코드를 실행할 환경에 전적으로 의존합니다.

질문자의 의도가 소프트웨어 라이센스에 대한 솔루션을 사용하는 것이었던 컨텐츠 에서이 질문에 답하기 위해 요구 사항은 다음과 같습니다.

  1. 제 3자가 앱을 소집하여 라이센스 키를 생성 할 수 없습니다.
  2. 소프트웨어 키의 내용이 안전 할 필요는 없습니다.
  3. 소프트웨어 키는 사람을 읽을 수 없습니다

디지털 서명은 키를 만드는 원시 데이터를 개인 키로 서명 할 수 있으므로 인간 읽을 수는 없지만 리버스 엔지니어링을 해독 할 수 있으므로이 문제를 해결할 수 있습니다. 그러나 개인 키는 안전하다는 것은 아무도 소프트웨어에 대한 라이센스를 만들 수 없다는 것을 의미합니다 (요점).

숙련 된 사람이 제품의 소프트웨어 잠금 장치를 제거하는 것을 막을 수는 없습니다. 따라서 출시 된 각 버전을 해킹 해야하는 경우. 그러나 당신은 그들이 모든 버전에 대해 공유 할 수있는 제품에 대한 새로운 키를 생성 할 수 있기를 원하지 않습니다.

Python Pynacl 문서에는 목적에 맞는 '디지털 서명'의 예가 있습니다. http://pynacl.readthedocs.org/en/latest/signing/

그리고 NaCl 프로젝트는 C 예제에 대한 원인입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top