비대칭 암호화에서 암호화와 서명의 차이점은 무엇입니까?
일부 데이터 암호화와 일부 데이터 서명 (RSA 사용)의 차이점은 무엇입니까?
단순히 공개-개인 키의 역할을 역전합니까?
예를 들어 개인 키를 사용하여 메시지를 생성하여 보낸 사람 일 수만 있습니다. 메시지를 읽는 데 공개 키를 사용하기를 원하며 누가 메시지를 읽는지 상관하지 않습니다. 특정 정보를 암호화하여 소프트웨어의 제품 키로 사용하고 싶습니다. 나는 이것들을 생성 할 수있는 유일한 사람임을 신경 쓰고 있습니다. 키 서명을 해독 / 읽기 위해 소프트웨어에 공개 키를 포함하고 싶습니다. 키의 데이터를 읽을 수있는 사람은 신경 쓰지 않으며, 데이터를 생성 할 수있는 유일한 사람인지는 신경 쓰지 않습니다.
이 시나리오에서 서명이 유용합니까?
암호화 할 때 공개 키 를 사용 하여 메시지를 작성 하고 개인 키 를 사용하여 메시지 를 읽습니다.
서명 할 때 개인 키 를 사용 하여 메시지 서명을 작성하고 공개 키 를 사용 하여 실제 키 인지 확인합니다.
개인 키를 사용하여 메시지를 생성하여 발신자가 될 수 있습니다.
메시지를 읽는 데 공개 키를 사용하고 싶은데 누가 메시지를 읽는지 상관하지 않습니다.
이다 서명 이 개인 키를 사용하여 수행됩니다.
특정 정보를 암호화하여 소프트웨어의 제품 키로 사용하고 싶습니다.
나는 이것들을 생성 할 수있는 유일한 사람임을 신경 쓰고 있습니다.
자신에게만 알면 키를 엉망으로 만들 필요가 없습니다. 임의의 데이터를 생성하여 데이터베이스에 보관할 수 있습니다.
그러나 사람들이 키가 실제로 자신의 키임을 알고 싶다면 임의의 데이터를 생성하고 데이터베이스에 보관하고 키로 서명해야합니다.
키 서명을 해독 / 읽기 위해 소프트웨어에 공개 키를 포함하고 싶습니다.
Verisign 또는 Thawte와 같은 상용 공급자로부터 공개 키에 대한 인증서를 구입해야 사람들이 소프트웨어를 위조하지 않고 공개 키를 대체하지 않았는지 확인할 수 있습니다.
RSA 암호화에서는 키 페어를 생성 할 때 공개 키로 선택하는 키와 개인 키 중 어느 것이 든 임의적입니다. 하나를 사용하여 암호화하면 다른 하나도 해독 할 수 있습니다. 양방향으로 작동합니다.
그래서, 당신이있는 메시지를 암호화 할 수있는 방법을보고 매우 간단 수신기의 공개 수신기가 그것을 해독 할 수 있도록 키 개인 키를 누릅니다.
서명은 서명자가 공개 키와 일치하는 개인 키를 가지고 있음을 증명합니다. 이를 위해서는 발신자의 개인 키로 메시지를 암호화 하고 일반 텍스트 버전과 함께 암호화 된 버전을 포함시키는 것으로 충분합니다 . 발신자를 확인하려면 암호화 된 버전을 해독하고 일반 텍스트와 동일한 지 확인하십시오.
물론 이것은 귀하의 메시지가 비밀이 아님을 의미합니다. 공개 키가 잘 알려져 있기 때문에 누구나 암호를 해독 할 수 있습니다. 그러나 그렇게 할 때, 암호문의 작성자는 해당 개인 키를 가지고 있음을 증명했습니다.
그러나 이는 일반 텍스트와 암호 텍스트를 함께 전송 크기를 두 배로 늘릴 수 있음을 의미합니다 (서명 확인에 관심이없는 사람들이 메시지를 읽도록하려는 경우). 대신 일반적으로 일반 텍스트 의 해시 를 만들어서 서명을 만듭니다 . 가짜 해시는 생성 할 수 없으므로 SHA-2와 같은 암호화 해시 알고리즘이 사용됩니다.
그래서:
- 서명을 생성하려면 일반 텍스트에서 해시를 만들고 개인 키로 암호화 한 다음 일반 텍스트와 함께 서명하십시오.
- 서명을 확인하려면 일반 텍스트에서 해시를 만들고 발신자의 공개 키로 서명을 해독 한 다음 두 해시가 동일한 지 확인하십시오.
네, 데이터 서명은 다른 사람이 가지고 있지 않은 자신 만의 왁스 스탬프를주는 것으로 생각하십시오. 무결성과 부인 방지 를 달성하기 위해 수행됩니다 . 암호화는 아무도 데이터를 볼 수 없습니다. 기밀 유지 를 위해 수행됩니다 . Wikipedia 참조 http://en.wikipedia.org/wiki/Information_security#Key_concepts
서명은 개인 키를 사용하여 서명 한 메시지의 해시입니다.
서명은 공개 키로 확인할 수있는 개인 키로 "해시"를 생성합니다. 텍스트는 일반으로 보내집니다.
암호화는 수신자의 공개 키를 사용하여 데이터를 암호화합니다. 디코딩은 개인 키로 수행됩니다.
따라서 키 사용은 역전되지 않습니다 (그렇지 않으면 개인 키는 더 이상 개인 키가 아닙니다!).
안전한 통신을 설정하는 데는 두 가지 뚜렷하지만 밀접한 관련 문제가 있습니다
- 승인 된 사람 만 해독하고 읽을 수 있도록 데이터를 암호화하십시오.
- 발신자의 신원 / 인증을 확인하십시오.
이 두 가지 문제는 공개 키 암호화를 사용하여 우아하게 해결할 수 있습니다.
I. 데이터의 암호화 및 해독
Alice는 아무도 읽을 수없는 메시지를 Bob에게 보내려고합니다.
- Alice는 Bob의 공개 키로 메시지를 암호화하여 보냅니다.
- Bob은 메시지를 받고 개인 키를 사용하여 암호를 해독합니다.
A가 B에게 메시지를 보내려면 A는 누구나 공개적으로 사용할 수있는 B의 공개 키를 사용해야하며 A의 공개 키나 개인 키는 여기에 표시되지 않습니다.
당신이 나에게 메시지를 보내려면 당신은 내가 당신에게 제공하는 내 공개 키를 알고 사용해야하며, 해당 개인 키에 액세스 할 수있는 유일한 사람이기 때문에 메시지를 해독 할 수 있습니다.
II. 발신자의 신원 확인 (인증)
Alice가 Bob에게 메시지를 다시 보내려고합니다. 데이터 암호화 문제는 위의 방법으로 해결됩니다.
그러나 Alice와 Bob 사이에 앉아서 Bob에게 '앨리스'라고 소개하고 Alice가 보낸 메시지를 전달하는 대신 Bob에게 내 메시지를 보내면 어떻게 될까요? Alice가 보낸 원본 메시지 (Bob의 개인 키에 액세스해야 함)를 해독하고 읽을 수는 없지만 그 사이의 모든 대화를 가로 채고 있습니다.
Bob이 수신하는 메시지가 Alice가 실제로 보낸 것인지 확인할 수있는 방법이 있습니까?
- Alice는 개인 키를 사용하여 메시지에 서명하고 메시지를 보냅니다. 실제로 서명 된 것은 메시지의 해시입니다 (예 : SHA-256 또는 SHA-512).
- Bob은이를 수신하고 Alice의 공개 키를 사용하여이를 검증합니다. Alice의 공개 키가 메시지를 성공적으로 확인 했으므로 Bob은 메시지가 Alice에 의해 서명되었다고 결론을 내릴 수 있습니다.
서명은 실제로 서명 한 개체의 출처 또는 보증인임을 나타냅니다. 그러나 누구나 객체를 읽을 수 있습니다.
암호화는 해당 개인 키가있는 사용자 만 키를 읽을 수 있지만 서명하지 않으면 암호화 된 개체 뒤에 있다는 보장이 없습니다.
공개 키 암호화에서 서명이 사용되는 방법과 이유를 정확하게 설명합니다. 다른 사람이 제공 한 임의의 메시지에 서명 (또는 암호화)하는 것은 매우 위험하므로 키를 손상시킬 수있는 알고리즘에 대한 공격을 허용합니다.
시나리오에서는 비대칭 암호화의 의미로 암호화하지 않습니다. 차라리 "인코딩"이라고합니다.
따라서 데이터를 이진 표현으로 인코딩 한 다음 개인 키로 서명하십시오. 공개 키를 통해 서명을 확인할 수없는 경우 서명 된 데이터가 개인 키로 생성되지 않은 것입니다. (서명되지 않은 데이터가 의미가 없음을 의미하는 "확인")
기능적으로 공개 / 개인 키 암호화를 사용하여 수신자 만 메시지를 읽을 수 있도록합니다. 메시지는 암호화 된 다음 수신자의 공개 키를 사용하여 암호화됩니다.
수신자에게 메시지를 작성했으며 전송 중에 변경되지 않았 음을 알리는 데 사용하는 서명. 메시지 서명은 개인 키를 사용하여 수행됩니다.
사용 된 알고리즘은 소수와 관련이 있습니다. 더 나은 설명을 위해 Google에서 검색을 수행합니다.
일부 데이터 암호화와 일부 데이터 서명 (RSA 사용)의 차이점은 무엇입니까?
암호화는 메시지 ( "일부 데이터")의 기밀성을 유지하면서 서명은 거부를 제공하지 않습니다. 즉 서명 한 엔터티 만 서명 할 수 있습니다. 기능상의 차이도 있습니다. 읽어.
단순히 공개-개인 키의 역할을 역전합니까?
절대적으로하지. 서명 및 암호 해독에 동일한 개인 키 (또는 확인 및 암호화에 동일한 공용 키 )를 사용하는 것은 혼동해서는 안됩니다. 이것은 수학적인 문제가 아니지만 (RSA는 여전히 안전해야 함) 키 관리 문제입니다 . 예를 들어 서명 키는 수명이 짧고 사용하기 전에 더 많은 보호 기능을 포함해야합니다.
동일한 메시지의 경우 서명자에게는 발신자 개인 키를 사용하고 암호화에는 수신자에게 신뢰할 수있는 공개 키를 사용해야합니다. 일반적으로 sign-then-encrypt가 사용되며, 그렇지 않으면 상대방이 서명을 자신의 것으로 바꿀 수 있습니다. 마찬가지로 암호 해독을 위해 수신자의 개인 키를 사용하고 확인을 위해 발신자 의 신뢰할 수있는 공개 키를 사용해야합니다 .
또한 서명 생성시 "개인 키로 암호화"를 사용하지 않는다는 것을 이해해야합니다. 모든 RSA 작업이 모듈 식 지수를 기반으로하지만 패딩 체계는 서명 생성과 완전히 다릅니다. 또한 공개 키는 RSA의 모든 실제 사용에서 RSA 개인 키와 완전히 다른 속성을 갖습니다.
예를 들어 개인 키를 사용하여 메시지를 생성하여 보낸 사람 일 수만 있습니다.
그것은 부인 방지 재산이며 서명으로 얻을 수 있습니다.
메시지를 읽는 데 공개 키를 사용하기를 원하며 누가 메시지를 읽는지 상관하지 않습니다.
공개 키는 모두에게 알려진 것으로 간주되어야합니다. 모든 사람이 메시지를 읽도록하려면 단순히 암호화하지 마십시오.
서명은 일반적으로 메시지 내용에 영향을 미치지 않습니다. 메시지는 서명과 별개로 간주됩니다. 공식적으로 그러한 서명은 부록이 메시지 인 "부록이있는 서명"으로 알려져 있습니다. 메시지가 서명보다 더 중요하다고 생각되기 때문에 조금 이상한 이름입니다. (일부) 메시지 복구를 제공하는 서명은 거의 없습니다. 더 이상 사용되지 않으며 일반적으로 더 이상 사용되지 않는 것으로 간주됩니다.
CMS와 같은 서명 프로토콜 은 메시지와 서명을 모두 포함 하는 컨테이너 형식 을 배포 할 수 있습니다 . 이 경우 먼저 일반 .zip 아카이브에서 파일 압축을 해제하는 것과 같이 컨테이너에서 여전히 암호화되지 않은 메시지를 가져와야합니다. 따라서 메시지가 보이지 않게 숨길 수 있으며이 경우 직접 사용할 수 없습니다.
특정 정보를 암호화하여 소프트웨어의 제품 키로 사용하고 싶습니다. 나는 이것들을 생성 할 수있는 유일한 사람임을 신경 쓰고 있습니다.
암호화는 기밀성을 유지하는 데 사용됩니다. 과거에는 RSA 서명 생성이 종종 "개인 키를 사용한 암호화"로 생각되었습니다. 그러나 위에서 설명한대로 작업이 상당히 다르기 때문에 이후 표준에서는 필연적으로 암호화 및 서명 생성을 시도하고 분리합니다.
키 서명을 해독 / 읽기 위해 소프트웨어에 공개 키를 포함하고 싶습니다. 키의 데이터를 읽을 수있는 사람은 신경 쓰지 않으며, 데이터를 생성 할 수있는 유일한 사람인지는 신경 쓰지 않습니다.
예,이를 공개 키에 대한 신뢰 설정이라고 합니다. 그러나 프로그램 코드를 보호하는 것은 메시지를 보호하는 것과는 매우 다릅니다. 코드 서명을 수행 할 수 있지만 코드 외부 에서 서명을 확인하려면 무언가가 필요 합니다 . 이를 제공하는 운영 체제가 있습니다.
예를 들어 Microsoft 인증 코드가 있습니다. iStore 및 Android 앱 스토어와 같은 응용 프로그램 저장소는 코드 서명을 사용하거나 사용하지 않을 수 있지만 응용 프로그램이 복제되지 않았거나 저장소 내에서 복제되지 않았다는 약간의 확신을 제공합니다. 암호화가 항상 해결책은 아닙니다.
코드가 전혀 복제 / 변경되지 않도록 하는 것이 훨씬 어렵습니다. 그렇게하면 DRM 영역에 제대로있게됩니다.
이 시나리오에서 서명이 유용합니까?
네 그럼요. 공개 키를 신뢰하는 경우 메시지 만 서명하도록하는 데 도움이 될 수 있습니다. 응용 프로그램 코드 / 통합 공개 키 인증에 도움이 될 수있는 경우 코드 를 실행할 환경에 전적으로 의존합니다.
질문자가 소프트웨어 라이센싱을 위해 솔루션을 사용하려는 내용에서이 질문에 대답하기위한 요구 사항은 다음과 같습니다.
- 타사는 앱을 디 컴파일하여 라이센스 키를 생성 할 수 없습니다.
- 소프트웨어 키의 내용은 안전하지 않아도됩니다
- 소프트웨어 키는 사람이 읽을 수 없습니다
디지털 서명은 키를 만드는 원시 데이터를 개인 키로 서명하여 사람이 읽을 수는 없지만 리버스 엔지니어링 된 경우 해독 할 수 있기 때문에이 문제를 해결합니다. 그러나 개인 키는 안전하므로 아무도 귀하의 소프트웨어에 대한 라이센스를 만들 수 없습니다.
숙련 된 사람이 제품의 소프트웨어 잠금 장치를 제거하지 못하게 할 수는 없습니다. 따라서 릴리스 된 각 버전을 해킹해야하는 경우. 그러나 모든 버전에서 공유 할 수있는 제품의 새 키를 생성 할 수 있기를 원하지 않습니다.
Python PyNaCl 문서에는 목적에 적합한 '디지털 서명'의 예가 있습니다. http://pynacl.readthedocs.org/en/latest/signing/
NaCl 프로젝트를 C 예제로
'development' 카테고리의 다른 글
| OR AND OR과 함께 WHERE를 사용하는 Laravel 4 Eloquent Query? (0) | 2020.04.07 |
|---|---|
| WPF의 ComboBox에 열거 형 속성 데이터 바인딩 (0) | 2020.04.07 |
| 유닉스 명령 줄에서 파일에서 임의의 줄을 읽는 쉬운 방법은 무엇입니까? (0) | 2020.04.07 |
| 부트 스트랩 4의 수직 정렬 센터 (0) | 2020.04.07 |
| Django 모델에서 on_delete는 무엇을합니까? (0) | 2020.04.07 |