sobota, grudnia 13, 2008

Untitled

Pracowita sobota:
=============



  1. CAPICOM posiada wiele ukrytych perełek chociaż szkoda, że sie go wycofuje
  2. Pożyteczny ustawiacz -  EnablePromptForCertificateUI - czy wyświetlać zapytanie o certyf. w formie dialogu UI
  3. Obiekty  w starym CAPICOM (nowy jest zalecany i dostępny tu - [SignedCms Class in theSystem.Security.Cryptography.Pkcs namespace.]:

    1. Certificate Store Objects - Przechowalnia certyfikatów
    2. Certificate Store Objects
    3. Digital Signature Objects - cytat ze strony MS:

    4. The SignedData object provides properties and methods to establish the content to be signed with a digital signature, to sign or cosign data digitally, and to verify the digital signature of signed data. The signed message is in PKCS #7 format. A data signature, if verified, proves the association between a signer and data and shows that the data was not changed in any way after the signature was created. Uwaga zwracają one łańcuch znaków (string), który może być zakodowany zgodnie z CAPICOM_ENCODING_TYPE domyślnie jest to  CAPICOM_ENCODE_BASE64 (=0)



      1. Metody: 

        1. CoSign - tworzy podpis cyfrowy pod uprzednio podpisaną zawartością. Ma postać:

        2. Function CoSign( _
          [ ByVal Signer As Signer ], _
          [ ByVal EncodingType As CAPICOM_ENCODING_TYPE ] _
          ) As String

        3. Sign - tworzy/lub zastępuje i zwraca podpis (SHA1) zawartość pola Content. Pole Content przed podpisem musi być wypełnione. Podpisywanie polega na obliczeniu skrótu do zawartości dokumentu (tzw. hash) i nastepnie zaszyfrowaniu (encode) go kluczem prywatnym pochodzącym z certyfikatu podpisującego (poświadczajacym niezbicie jego tożsamość). Ma postać:
        4. Function Sign( _
          [ ByVal Signer As Signer ], _
          [ ByVal bDetached As Boolean ], _
          [ ByVal EncodingType As CAPICOM_ENCODING_TYPE ] _
          ) As String

        5. Standardowo bDetached = false (sygnatura będzie wbudowana w treść dokumentu), gdy =true to powstanie nowy dokument związany z dokumentem podstawowym (tym do podpisania) i bedzie zawierał tylko podpis. Trzeci parametr jest zbędny.
        6. Verify - zwraca łańcuch zakodowanych danych. Proces najbardziej skomplikowany, polega na rozszyfrowaniu skrótu zawartości podpisanej. Do rozszyfrowania tego skrótu służy klucz publiczny certyfikatu. Jest on porównywany ze skrótem zawartości podpisywanej (oblicza się go tu ad-hoc). Te dwa skróty muszą być zgodne. Świadczy to o tym, że zawartość dokumentu się nie zmieniła. Dodatkowo budowany jest łańcuch ceryfikatów (builds a certificate chain ) w celu weryfikacji używanych do podpisu i sprawdzenia ceryfikatów (dzięki tem sprawdza się czy dokument podpisała właściwa osoba - uprawniona do tego). Parametry:

          1. SignedMessage - podpisany skrót dokumentu którego poprawność sprawdzamy
          2. bDetached - gdy =true, sprawdzamy dokument z podpisem zewnętrznym (przechowywanym w oddzielnym pliku), do weryfikacji potrzebna jest zawartość orginalnego (podpisywanego) dokumentu. Domyślnie =false.
          3. VerifyFlag - sprawdzać tylko sygnaturę (prawidłowość podpisu), czy też sprawdzać jeszcze dodatkowo certyfikaty którymi został dokument podpisany (CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE == 1 i jest domyślnie przyjęta)

        7. Ma postać:
        8. Function Verify( _
          ByVal SignedMessage As String, _
          [ ByVal bDetached As Boolean ], _
          [ ByVal VerifyFlag As CAPICOM_SIGNED_DATA_VERIFY_FLAG ] _
          ) As String

      2. Właściwości:

        1. Certificates
        2. Content
        3. Signers

    5. Enveloped Data Objects
    6. Data Encryption Objects
    7. Auxiliary Objects
    8. Certificate Enrollment Objects

  4. Każdy z nich ma pod obiekty, a one mają metody i właściwości.

  5. Sprawdzanie certyfikatów, to cała sztuka. Zwykle się to robi poprzez ustawienia CheckFlag.


  6. cert.IsValid.CheckFlag = CAPICOM_CHECK_TRUSTED_ROOT + CAPICOM_CHECK_TIME_VALIDITY + CAPICOM_CHECK_SIGNATURE_VALIDITY + ;


    CAPICOM_CHECK_COMPLETE_CHAIN + CAPICOM_CHECK_NAME_CONSTRAINTS + ;


    CAPICOM_CHECK_BASIC_CONSTRAINTS + CAPICOM_CHECK_NESTED_VALIDITY_PERIOD



  7. Stała CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS odpowiada za sprawdzenie offline, wtedy korzysta się z listy CRL lokalnej (ściagniętej do repozytorium). To powinno działać - http://support.microsoft.com/kb/304298



  8. Podobnie można postąpić w przypadku sprawdzania danych już podpisanych (wystarczy z nich wyłuskać kolekcję certyfikatów - Certificates)



  9. Inne przykłady - http://www.ureader.com/msg/165973.aspx



  10. Lista dyskusyjna - http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?guid=34eeafce-b0e4-4356-9b37-6182f1028ef0



  11. Security - http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?query=capicom&dg=microsoft.public.security.toolkit&cat=en_us_d92f32ef-4f37-4934-bc69-6be3e91502e8&lang=en&cr=us&pt=&catlist=&dglist=&ptlist=&exp=&sloc=en-us



  12. Domyślne sprawdzenie - The default value for for Certificate.IsValid() is CAPICOM_CHECK_SIGNATURE_VALIDITY, CAPICOM_CHECK_TIME_VALIDITY,
    CAPICOM_CHECK_TRUSTED_ROOT, and CAPICOM_CHECK_COMPLETE_CHAIN



  13. Dump - CAPICOM_CHECK_ONLINE_ALL):

    The values of the CAPICOM_CHECK_FLAG Enum are: (na podstawie - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/certificatestatus_checkflag.asp

             0    CAPICOM_CHECK_NONE
             1    CAPICOM_CHECK_TRUSTED_ROOT
            10    CAPICOM_CHECK_TIME_VALIDITY
           100    CAPICOM_CHECK_SIGNATURE_VALIDITY
          1000    CAPICOM_CHECK_ONLINE_REVOCATION_STATUS
         10000    CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS
        100000    CAPICOM_CHECK_COMPLETE_CHAIN
       1000000    CAPICOM_CHECK_NAME_CONSTRAINTS
      10000000    CAPICOM_CHECK_BASIC_CONSTRAINTS
    100000000    CAPICOM_CHECK_NESTED_VALIDITY_PERIOD
    111101111    CAPICOM_CHECK_ONLINE_ALL
    111110111    CAPICOM_CHECK_OFFLINE_ALL

    111101111    Default flag property



  14. Pomysł jest taki: pobierać z internetu CRL-e, ładować je do lokalnego repozytorium i sprawdzać lokalnie OFFLINE



  15. Z list dyskusyjnych:



  16. "Satish" <Satish@discussions.microsoft.com> wrote in message
    news:996A03DA-8469-4EEB-9AE2-6643670DCAFA@microsoft.com...
    > I'm a trifle noob to Capicom, so someone please help me out.
    >
    > I'm using Capicom.EncryptedData's SetSecret() and Encrypt().
    >
    > According to the docs
    > http://msdn2.microsoft.com/en-us/library/aa382015.aspx, SetSecret()
    > derives
    > the "session key", which I believe is the symmetric key.
    >
    > Is there a way to *export* this key so that I can use it with another
    > crypto
    > provider for decrypting data?

    The construction of a Capicom EncryptedData object is not documented in a
    platform-neutral way.

    See http://msdn2.microsoft.com/en-us/library/aa382010.aspx, where it says:

    "
    Note  CAPICOM does not support the PKCS #7 EncryptedData content type but
    uses a nonstandard ASN structure for EncryptedData. Therefore, only CAPICOM
    can decrypt a CAPICOM EncryptedData object."



  17. Inny ciekawy post - An OASIS TC is currently toying with the idea that MSIE can,
    without adding any native extension code, perform XML Signatures and
    possibly also XML Encryption, by an invocation from a web page:

    http://www.oasis-open.org/committees/download.php/16304/agsc-tpki-requirements-00.txt

    To my knowledge this is not the case.   You have to use a Java
    applet, install CAPICOM, or something similar in order to perform
    signature or encryption operations in the browser environment.

    Could somebody ON THIS LIST (not off-list) verify (or not) this statement?

    Anders Rundgren



  18. Dziwna składanka - http://forums.sun.com/thread.jspa?threadID=5309977 - weryfikacja danych podpisanych przez CAPICOM na platformie Java:



  19. Inne http://msdn.microsoft.com/en-us/library/aa377635(VS.85).aspx



  20. http://msdn.microsoft.com/en-us/library/aa378126(VS.85).aspx



  21. http://mwawrzynczyk.blogspot.com/2007_07_22_archive.html



  22. http://www.codeproject.com/KB/security/cryptography.aspx



  23. http://msdn.microsoft.com/en-us/library/ms867087.aspx



  24. http://www.sdmediagroup.com/reg/sap/sap7.pdf