일부 데이터 암호화와 일부 데이터 서명 (RSA 사용)의 차이점은 무엇입니까?
암호화는 메시지의 기밀성을 유지하지만 ( "일부 데이터") 서명하면 서명을 거부 할 수 없습니다. 즉 서명 한 엔터티 만 서명 할 수 있습니다. 기능상의 차이도 있습니다. 읽어.
단순히 공개-개인 키의 역할을 역전합니까?
절대적으로하지. 서명 및 암호 해독에 동일한 개인 키 (또는 확인 및 암호화에 동일한 공용 키 )를 사용하는 것은 혼동해서는 안됩니다. 이것은 수학적 문제가 아니며 (RSA는 여전히 안전해야 함) 키 관리 문제 . 예를 들어, 서명 키는 수명이 짧고 사용하기 전에 더 많은 보호 기능이 있어야합니다.
동일한 메시지의 경우 서명자에게는 발신자 개인 키를 사용하고 암호화에는 수신자에게 신뢰할 수있는 공개 키를 사용해야합니다. 일반적으로 sign-then-encrypt가 사용되며, 그렇지 않으면 상대방이 서명을 자신의 것으로 바꿀 수 있습니다. 마찬가지로 암호 해독을 위해 수신자의 개인 키를 사용하고 확인을 위해 발신자 의 신뢰할 수있는 공개 키를 사용해야합니다 .
또한 서명 생성시 "개인 키로 암호화"를 사용하지 않는다는 것을 이해해야합니다. 모든 RSA 작업이 모듈 식 지수를 기반으로하지만 패딩 체계는 서명 생성과 완전히 다릅니다. 또한 공개 키는 RSA의 모든 실제 사용에서 RSA 개인 키와 완전히 다른 속성을 갖습니다.
예를 들어 개인 키를 사용하여 메시지를 생성하여 보낸 사람 일 수만 있습니다.
그것은 부인 방지 속성이며 서명으로 얻을 수 있습니다.
메시지를 읽는 데 공개 키를 사용하기를 원하며 누가 메시지를 읽는지 상관하지 않습니다.
공개 키는 모두에게 알려진 것으로 간주되어야합니다. 모든 사람이 메시지를 읽도록하려면 단순히 암호화하지 마십시오.
서명은 일반적으로 메시지 내용에 영향을 미치지 않습니다. 메시지는 서명과 별개로 간주됩니다. 공식적으로 그러한 서명은 부록이 메시지 인 "부록이있는 서명"으로 알려져 있습니다. 메시지가 서명보다 더 중요한 것으로 간주되기 때문에 조금 이상한 이름입니다. (일부) 메시지 복구를 제공하는 서명은 거의 없습니다. 더 이상 사용되지 않으며 일반적으로 더 이상 사용되지 않는 것으로 간주됩니다.
CMS와 같은 서명 프로토콜 은 메시지와 서명을 모두 포함 하는 컨테이너 형식 을 배포 할 수 있습니다 . 이 경우 먼저 일반 .zip 아카이브에서 파일 압축을 해제하는 것과 같이 컨테이너에서 여전히 암호화되지 않은 메시지를 가져와야합니다. 따라서 메시지가 보이지 않게 숨길 수 있으며이 경우 직접 사용할 수 없습니다.
특정 정보를 암호화하여 소프트웨어의 제품 키로 사용하고 싶습니다. 나는 이것들을 생성 할 수있는 유일한 사람임을 신경 쓰고 있습니다.
암호화는 기밀성을 유지하는 데 사용됩니다. 과거에는 RSA 서명 생성이 종종 "개인 키를 사용한 암호화"로 생각되었습니다. 그러나 위에서 설명한대로 작업이 상당히 다르며 이후 표준에서는 필연적으로 암호화 및 서명 생성을 시도하고 분리합니다.
키 서명을 해독 / 읽기 위해 소프트웨어에 공개 키를 포함하고 싶습니다. 키의 데이터를 읽을 수있는 사람은 신경 쓰지 않으며, 데이터를 생성 할 수있는 유일한 사람인지 확인합니다.
예,이를 공개 키에 대한 신뢰 설정이라고 합니다. 그러나 프로그램 코드를 보호하는 것은 메시지를 보호하는 것과는 매우 다릅니다. 코드 서명을 수행 할 수 있지만 코드 외부 에서 서명을 확인하는 것이 필요 합니다 . 이를 제공하는 운영 체제가 있습니다.
예를 들어 Microsoft 인증 코드가 있습니다. iStore 및 Android 앱 스토어와 같은 응용 프로그램 저장소는 코드 서명을 사용하거나 사용하지 않을 수 있지만 응용 프로그램이 복제되지 않았거나 저장소 내에서 복제되지 않았다는 약간의 확신을 제공합니다. 암호화가 항상 해결책은 아닙니다.
코드가 전혀 복제 / 변경되지 않도록 하는 것이 훨씬 어렵습니다. 그렇게하면 DRM 영역에 제대로있게됩니다.
이 시나리오에서 서명이 유용합니까?
네 그럼요. 공개 키를 신뢰하는 경우 메시지 만 서명하도록하는 데 도움이 될 수 있습니다. 응용 프로그램 코드 / 통합 공개 키 인증에 도움이 될 수있는 경우 코드 를 실행할 환경에 전적으로 의존합니다.