none
MSDN CNG 예제 ArgumentException RRS feed

  • 질문

  • MSDN에서 제공하는 CNG 예제를 실행하였습니다.

    버전 1,2 까지는 정상 작동하는데 디지털 서명을 사용하는 3번부터는 ArgumentException 오류가 발생합니다.

    오류의 내용은

    - ECDsaCng 알고리즘과 함께 사용되는 키에는 ECDsa의 알고리즘 그룹이 있어야합니다. -

    입니다.

    MSDN의 설명 그대로 따라했다고 생각되어지는데 오류가 발생되어 어떻게 처리해야할지 모르겠습니다.

    도움 부탁드립니다.

    해당 소스코드 링크입니다.
    http://msdn.microsoft.com/ko-kr/library/cc488019.aspx

    2009년 10월 19일 월요일 오전 11:59

답변

  • // Alice.cs
    if (3 <= Version)
                {
                using (CngKey DSKey = CngKey.Create(CngAlgorithm.ECDsaP521, null, keyCreateParms))
                    {
                    // CngKeyBlobFormat.GenericPrivateBlob 변경
                    byte[] dsKeyBlob = DSKey.Export(CngKeyBlobFormat.GenericPrivateBlob);
                    Alice.StoreDSKey(dsKeyBlob);
                    s = Encoding.ASCII.GetString(dsKeyBlob);
                    Display("\nFirst, I will send Bob a digital signature key "
                            +"over a public channel.\n" +
                            (fVerbose ? "Here it is:\n\n" + s + "\n\n" : ""));
                    Alice.ChMgr.SendMessage(dsKeyBlob);
                    }
                }
    
    // Communicator.cs
    public void StoreDSKey( byte[] DSKeyBlob )
    {   
        // CngKeyBlobFormat.GenericPrivateBlob 변경
        m_DSKey =CngKey.Import( DSKeyBlob, CngKeyBlobFormat.GenericPrivateBlob );
    }

    저도 이 문제가 생겨서 Blob를 수정해서 해결했습니다. (Alice, Bob, Mallory  Communicator.cs 수정 하세요.) 

    CngKeyBlobFormat.Pkcs8PrivateBlob --> CngKeyBlobFormat.GenericPrivateBlob


    2016년 3월 17일 목요일 오전 11:30

모든 응답

  • 예제를 모두 분석해보지는 못하였지만, 우선 나타나는 현상을 예제 그 자체에서 발견하였습니다. Alice의 관점에서 실행할 때, Communicator 클래스의 59행에서 같은 오류가 나타났습니다. 생성자에서 에러 메시지 "Cryptography_ArgECDsaRequiresECDsaKey"에 해당하는 지역화된 메시지가 선택되는 것이었고, 내용을 살펴보니 (key.AlgorithmGroup != CngAlgorithmGroup.ECDsa) 일 때 이와 같은 예외가 발생하고 있었습니다.

    디버그를 시도해보니 전달된 key의 AlgorithmGroup은 ECDsa가 아닌 ECD였으며, 최초에 Key를 Import할 때의 문제점이나 오류가 없는지를 예제 코드에서도 한번 검토해봐야 할 것 같습니다.


    rkttu
    2009년 10월 20일 화요일 오전 8:01
  • // Alice.cs
    if (3 <= Version)
                {
                using (CngKey DSKey = CngKey.Create(CngAlgorithm.ECDsaP521, null, keyCreateParms))
                    {
                    // CngKeyBlobFormat.GenericPrivateBlob 변경
                    byte[] dsKeyBlob = DSKey.Export(CngKeyBlobFormat.GenericPrivateBlob);
                    Alice.StoreDSKey(dsKeyBlob);
                    s = Encoding.ASCII.GetString(dsKeyBlob);
                    Display("\nFirst, I will send Bob a digital signature key "
                            +"over a public channel.\n" +
                            (fVerbose ? "Here it is:\n\n" + s + "\n\n" : ""));
                    Alice.ChMgr.SendMessage(dsKeyBlob);
                    }
                }
    
    // Communicator.cs
    public void StoreDSKey( byte[] DSKeyBlob )
    {   
        // CngKeyBlobFormat.GenericPrivateBlob 변경
        m_DSKey =CngKey.Import( DSKeyBlob, CngKeyBlobFormat.GenericPrivateBlob );
    }

    저도 이 문제가 생겨서 Blob를 수정해서 해결했습니다. (Alice, Bob, Mallory  Communicator.cs 수정 하세요.) 

    CngKeyBlobFormat.Pkcs8PrivateBlob --> CngKeyBlobFormat.GenericPrivateBlob


    2016년 3월 17일 목요일 오전 11:30