2009-07-25 2 views
12

RSACryptoServiceProvider가 공개 키로 암호화 할 수 있다는 것을 알고 있으면 개인 키로 해독 할 수 있습니다. .net RSACryptoServiceProvider를 사용하여 개인 키로 암호화 할 수 있습니까?

그것은 개인 키를 암호화하고 RSACryptoServiceProvider를 사용하여 공개 키 암호를 해독 할 수 있습니까?

+0

* "개인 키로 암호화"*는 유효한 암호화 작업이 아닙니다. 해당 작업을 수행하려는 경우 일반적으로 *** 서명 구성표 (복구 포함) ***가 필요합니다. – jww

답변

-3

아니요. 공개/개인 키 암호화가 작동하는 방식이 아닙니다. 공개 키로만 암호화 할 수 있으며 개인 키로 해독 할 수 있습니다.

+1

고마워! RSA가 개인 키로 암호화 할 수 없다면, 내 소프트웨어를 보호하기 위해 일련 번호를 쓰고 싶다. 다른 방법으로 어떻게해야 하는가? – guaike

+11

사실, 개인 키를 사용하여 암호화하는 것은 그 용도를 가질 수 있습니다. 당신은 무언가를 암호화하고 공개 할 수 있으며 "public"은 * public * 키를 사용하여 메시지를 해독 할 수 있습니다. 따라서 암호화 된 파일이 여러분에게서 온 것을 알 수 있습니다. 이는 서명/인증의 기본적인 형태로 작동합니다. 이전 DOS 기반 PGP가 이것을 허용했습니다. – CraigTP

+1

크레이그 (Craig)는 서명하는 것에 대해 이야기하고 있습니다. 이는 완전히 다른 것입니다. 서명은 암호화가 아닙니다 (암호화 임에도 불구하고). 그렇더라도 서명은 개인 키로 만 생성 할 수 있지만 공개 키로 확인합니다. – blowdart

2

다행히도 아니오. 그러나 개인 키로 서명하고 공개 키로 서명을 확인할 수 있습니다.

핵심 역할이 바뀌면 수학이 관련이 있지만 (서명 작동 방식), 개인 정보 암호화는 암호 해독 키가 잘 알려져 있고 공개 될 때별로 의미가 없습니다.

+0

수학이 반전 될 때 역기능은 끝내는 데 훨씬 더 오랜 시간이 걸릴 것입니다. –

+1

'reverse the math'에 의해 알고리즘에서 e와 d가 바뀌면 수학에 신경 쓰지 않는다는 것을 의미합니다. 이것이 서명입니다 : 개인 키 (개인 지수 'd')로 메시지 해시 다이제스트를 암호화합니다. 분명히 계산 방향이 바뀔 수 있음을 의미하지는 않습니다. –

-1

공개 키 암호 시스템의 보안은 sign()/encrypt() 함수가 공개 키 "트랩 도어"없이 암호 해독하는 데 시간이 오래 걸리기 때문에 one-way function이라는 사실에 달려 있습니다.

또한 일반적으로 생성 된 키는 같을지라도 동일한 길이가 아닙니다. RSA에는 비대칭 키 길이에 대한 많은 논문이 있습니다. 개인 키와 원시 RSA 연산을 수행

6

일반적으로 암호 해독 작업이라고합니다 (바로 암호화 작업을 호출되는 공개 키와 함께 수행 등).

이 작업에 액세스하는 것이 유용합니다 (예 : 프레임 워크에서 지원되지 않는 작업을 구현하는 경우).

작업이 있습니다. DecryptValue -method이며, RSACryptoServiceProvider의 기본 클래스 인 System.Security.Cryptography.RSA으로 정의됩니다. 아쉽게도 RSACryptoServiceProvider는 지원하지 않습니다 (기본 win32-API 인 CryptoAPI는이를 지원하지 않으므로). RSA 클래스의 다른 .NET 구현을 얻을 수 있다면 그렇게 할 수 있습니다.

41

그냥 물건을 조금 정리하기 :

RSA를 사용할 수 있습니다 또는 (서명 보장하기위한 (이브가 앨리스가 밥에게 보내는 메시지를 읽을 수 없도록) 암호화를위한 앨리스가 밥에게 메시지를 보낼 경우, 공개 키와 개인 키 - 밥은 RSA는 키 쌍을 생성

) 앨리스 척 이브 메시지를 보낸, 그리고 실제로 앨리스 것을 알고있다. RSA는 공개 키를 적용한 다음 개인 키를 적용하거나 그 반대의 경우에도 동일한 메시지를 다시 제공하도록 설계되었습니다. 공개 키는 개인 키에서 파생 될 수 없으며 그 반대의 경우도 마찬가지입니다.

암호화에 RSA를 사용하려면 Alice가 Bob의 공개 키를 사용하여 메시지를 암호화합니다. 이 메시지를 읽는 유일한 방법은 Bob의 개인 키로하는 것입니다. 따라서 이브는이 열쇠가 없기 때문에 메시지를 읽을 수 없습니다. 반면에 이것은 메시지 소스의 인증을 제공하지 않습니다. Eve는 공개 키이기 때문에 Bob의 공개 키를 가져와 Bob에게 메시지를 보내고 Alice 인 것처럼 위장 할 수 있습니다. 서명에 RSA를 사용하려면

는, 앨리스, 메시지의 해시를 취 자신의 개인 키를 사용하여 해시를 암호화하고 메시지에 (이 서명입니다) 결과를 추가합니다. Eve는 물론 Alice의 공개 키를 사용하여 해독 할 수 있습니다. 그러나 Bob은 Alice의 공개 키를 사용하여 서명을 해독하고 일치하는지 확인합니다.그렇다면 앨리스의 비공개 키를 사용하여 암호화되었으므로 앨리스의 개인 키가 있어야합니다.


이제 .NET 암호화 API에 익숙하지 않아 여기에 설명 된 것과 정확히 일치하는지 확실하지 않습니다. 그러나이 설명은 당신이 얻고있는 답을 이해하는 데 도움이 될 수 있습니다.

+0

"공개 키를 적용한 다음 비공개 키를 적용 하시겠습니까?"그 반대의 경우는 무엇을 의미합니까? "적용"은 무엇을 의미합니까? – WarLord

+0

앨리스가 해시 대신 메시지 자체를 암호화하면 어떻게됩니까? 그게 더 간단하지 않겠습니까? 아니면 이것에 보안 결함이 있습니까? 나는 암호화가 아니라 서명하는 것에 대해 말하고 있습니다. –

16

모두가 같은 것은 없다 중 하나 RSA가 작동하는 방법을 알고하지 않습니다 주장, 또는 그들은 "서명"틀에 박힌 생활에 갇혀있다.

비밀 키로 암호화하는 것이 전적으로 가능하며 완전히 이해할 수 있습니다. 예, 이것은 서명과 유사하지만, 대부분의 현대 라이브러리가 서명하는 것과 전혀 다릅니다. 그들에게 메시지 다이제스트 또는 HMAC를 계산하고 개인 키로 암호화하는 것을 의미합니다. 서명에 개인 키를 사용하는 암호화를 사용하면 문서를 금고에 부착하고 키를 놓아 두는 것만 큼 문서에 서명하는 것이 중요합니다.

예, 동일한 작업이기 때문에 암호화되어 있습니다. 개인 키로 암호화 된 암호문은 공개 키로 암호화 된 암호문과 같이 판독 할 수 없습니다. 하나는 암호문을 해독하기 위해 두 개의 키가 모두 필요합니다.

는 RSA 알고리즘에 대한 참조를 위해 http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html를 참조하십시오.

+0

[이 게시물의] (http://stackoverflow.com/a/2350959/1299353)의 두 링크는 ​​RSA의 특정 구현과 개인 키 암호화의 안전성에 대해 얘기합니다 – Jett

+0

이 답변은 재미 있습니다 ... 나는 나는 암호 학자와 수학자의 학문 단체에 동의하지 않을 것이라고 확신하지 못합니다. – jww

+0

그래, 이건 RSA 이식에 특유하다, 맞습니까? E와 D는 공용/개인 마술이므로 암호화/해독하는 데 오직 하나만 있으면됩니다. RSA가 공개 키 P와 Q (개인 키에있을 수도 있음)에 다른 데이터를 포함하는 경우도 있습니다. – therealsix

0

PrivateKey로 암호화하거나 해독 할 수 있습니다. PrivateKey infact에는, Private 및 PublicKey가 포함됩니다.

은 이론적으로 적어도 당신은 한 PublicKey과 암호화의 PrivateKey 반대의 경우도 마찬가지로 해독 할 수 있습니다. VB.net에서는 첫 번째 케이스가 작동하고 secondcase가 BadKey 오류를 던졌습니다.

+2

PrivateKey로 암호화하고 PublicKey로 해독해야합니다. 언젠가 실패한 시도 후에 나는'RSACryptoServiceProvider.Encrypt'가'RSACryptoServiceProvider' 객체가 PrivateKey로부터 생성 될 때라도 항상 PublicKey를 사용한다는 것을 이해했습니다. 반대로 해시 알고리즘이 필요하기 때문에'Sign '을 사용할 수 없지만 해시를 사용하여 데이터를 암호화하려고합니다. 즉, .Net 구현에 문제가 있습니다. – i486

0

둘 다 수행 할 수 있습니다. 공개 및 비공개로 암호화하거나 비공개로 암호화하고 해독합니다. 개인 키를 사용하여 암호를 해독 한 다음 암호를 해독 할 수 없으며 공개 키만 사용하여 암호를 해독 할 수도 없습니다.

Remus it it; 개인 키로 암호화하는 것은 해독 키가 잘 알려져 있고 대중적 일 때별로 의미가 없습니다.

또한,하지만 그 반대의 경우도 마찬가지, 개인 키에서 공개 키를 유도 할 수있다.

+0

나는이 대답이 즐겁다는 것을 안다. 나는 암호 학자와 수학자의 학문적 견해에 동의하지 않을 것이다. – jww

+0

예, 공개 키를 알고 있어야 할 때 개인 키로 암호화하는 것이 궁금합니다. 그것과 같은 것이 아니라면, 공개 키 (public key)는 '공개 (public) 정말로 모든 사람에게 공개되지는 않지만 관련 당사자에게만 공개됩니다. –

관련 문제