2012-06-01 3 views
3

저는 암호를 처음 사용합니다. 나는 대칭 및 비대칭 알고리즘이 각각 하나 및 두 개의 암호화 키를 사용한다고 읽었습니다. 이러한 키는 안전한 장소에 저장해야합니다. 하지만 asp.net에서 암호화를 수행하는 방법에 대한 자습서를 찾기 위해 웹을 검색했을 때 나에게 이상한 것을 발견했습니다! 예 : this tutorial.암호화 키는 어디에 저장되어 있습니까?

데이터를 암호화하거나 해독 할 때 공개 키 또는 개인 키가 저장되거나 제공되지 않습니다! 나는 이해할 수 없다.

다른 문제는 내가 지금까지 발견 한 모든 자습서는이 코드가 무엇이며 왜 사용되는지에 대한 설명이없는 코드라는 것입니다. 나는 좋은 자습서가 제안 주셔서 감사합니다. RSACryptoServiceProvider Constructor에서

답변

5

:

에는 기본 키가없는 경우, 새 키가 생성됩니다.

이 생성자는 다른 사용자와 안전하게 저장하고 교환 할 수 있도록 세션 키를 암호화하는 데 적합한 Exchange 키 쌍을 만듭니다. 생성 된 키는 관리되지 않는 Microsoft Cryptographic API (CAPI)에서 사용되는 AT_KEYEXCHANGE 값을 사용하여 생성 된 키에 해당합니다.

그래서 이미 생성 된 키 쌍을 찾을 수 없다면 새로운 키 쌍을 생성합니다. 세션 기반 데이터 이외의 다른 용도로 사용해서는 안됩니다.

약간의 배경, 비대칭 키 쌍은 인증과 관련된 (나는 당신이 Windows를 사용 있으리라 믿고있어). 이 인증서는 비대칭 키에 신뢰를두기 위해 사용하는 인증서입니다. 모든 인증서는 인증 기관 (비대칭 키를 발행하는 기관)이 서명 할 수 있습니다. 인증 기관을 신뢰하면 해당 기관이 서명 한 인증서에 속한 비대칭 키를 신뢰합니다. 이러한 모든 인증서는 "인증서 저장소", 즉 "키 저장소"(Java), "키 링"(Mac)으로 저장됩니다.

Start > Run > certmgr.msc을 통해 인증서를 볼 수 있습니다. 귀하의 인증서는 개인> 인증서 아래에 있습니다. 하나를 열어 Certificate Path 탭으로 이동하면 인증 기관까지의 인증서 체인이 표시됩니다. 인증 기관에 속한 "루트"인증서가 Trusted Root Certification Authorities > Certificates 상점에 있으면 해당 인증서는 유효하고 신뢰할 수있는 것으로 간주됩니다.

사용자를 위해 암호화하려면 자신의 인증서 저장소로 가서 암호화 인증서를 가져와야합니다. 이렇게하려면 "현재 사용자"키 저장소를 열어 거기에있는 모든 인증서를 반복하고 키 사용법이 "키 암호화"인 인증서를 선택해야합니다. 두 개 이상인 경우 사용자에게 그는 사용하고 싶어한다.

예를 들어 웹 서버 인 경우 서비스 계정을 사용하여 암호화하려면 "로컬 시스템"키 저장소에있는 인증서를 사용해야하며 서비스 계정에 개인 키에 대한 읽기 권한 만 부여해야합니다 사용할 인증서와 연관되어 있습니다.

이 예를 들어, X509Store Class을 사용하여 수행 할 수 있습니다 :

X509Store certificateStore = new X509Store("MY", StoreLocation.CurrentUser); 
X509Certificate2Collection allCertificates = certificateStore.Certificates; 
//Iterate through all certificates 

"MY은"개인 인증서를 나타내고, 나머지는 here를 찾을 수 있습니다. CurrentUser는 사용자 키를 나타내고 다른 옵션은 LocalMachine입니다.

사용할 인증서가 있으면 대칭 키와 함께 암호화에 공용 키와 암호 해독 용 개인 키를 사용해야합니다. 당신이 암호화 싶어 데이터의 큰 세트가 있다면 그럼, 당신이 할 것입니다 것은 :

  1. 가져 오기 인증서
  2. 인증서
  3. 대칭 키를 생성 (AES)
  4. 데이터 암호화에서 공개 키를 당겨 대칭 키 사용
  5. 공개 키를 사용하여 대칭 키 암호화
  6. 암호화 된 데이터와 함께 암호화 된 데이터를 암호화 한 인증서의 식별자 (일련 번호)와 함께 저장
  7. 당신은 당신이해야 해독

: 그 일련 번호

  • 와 키 저장소에서 암호화 된 데이터
  • 풀 인증서에서

    1. 읽기 일련 번호가 해당 인증서에서 개인 키를 당겨
    2. 해당 개인 키로 대칭 키 암호 해독
    3. 해당 대칭 키를 사용하여 데이터 암호 해독
    4. 사용 da ta

    나는 당신이보고 싶다면 이것을 수행하는 코드 샘플을 가지고 있는데, 도움이 필요한 부분을 알려주십시오.

    아마도 조금 혼란 스러웠으므로 명확히하고 싶은 부분을 알려주십시오.

  • +1

    좋은 설명을 주셔서 감사합니다. 내 질문에 대답했습니다.하지만 "세션 기반 데이터 이외의 다른 용도로 사용해서는 안됩니다."라는게 무슨 뜻입니까? ? 새 키 또는 RSACryptoServiceProvider 자체를 사용하지 않습니까? 당신은 asp.net에서 암호화에 대한 자세한 설명과 함께 좋은 튜토리얼을 제안 할 수 있습니까? 필자는 실제로 콘솔의 주요 기능을 모두 수행하는 샘플이 아닌 실제 세계를 필요로합니다. –

    +3

    @reza 키를 지정하지 않고 RSACryptoServiceProvider 객체를 구현하면 세션 완료 후 어느 위치에도 저장되지 않는 일회용 키가 생성됩니다 (객체가 삭제됨). 나는 좋은 온라인 자습서가 있는지 모르겠다. 그러나 나는 무엇인가 가질지도 모른다. 어떤 종류의 데이터를 암호화 하시겠습니까? –

    +1

    사용자 자신이 아닌 다른 사람이 보지 말아야하는 개인 데이터를 암호화하려고합니다. 공유 호스팅입니다. 서버에 액세스 할 수 없습니다. 데이터베이스 서버의 데이터를 암호화 할 수 없습니다. 개인 키를 저장할 위치가 확실하지 않습니다. 하지만 난 암호화와 암호 해독 모두 같은 응용 프로그램에서 이루어집니다 같이 AES 알고리즘을 사용하여 대칭 암호화를 사용하고자하는 알아 –

    관련 문제