實驗一-密碼引擎-加密API研究


一、微軟的CryptoAPI加密技術

  1. 功能:為應用程序開發者提供在Win32環境下使用加密、驗證等安全服務時的標准加密接口。CryptoAPI處於應用程序和CSP(cryptographic service provider)之間。
  2. CryptoAPI共有五部分組成:簡單消息函數(Simplified Message Functions)、低層消息函數(Low-level Message Functions)、基本加密函數(Base Cryptographic Functions)、證書編解碼函數(Certificate Encode/Decode Functions)和證書庫管理函數(Certificate Store Functions)。其中前三者可用於對敏感信息進行加密或簽名處理,可保證網絡傳輸信心的私有性;后兩者通過對證書的使用,可保證網絡信息交流中的認證性。
    • 基本加密函數:為開發加密應用程序提供了足夠靈活的空間。所有CSP 的通訊都是通過這些函數。
      image
    • 編碼/解碼函數:用來對證書、證書撤銷列表、證書請求和證書擴展進行編碼和解碼。
      image
    • 證書和證書庫函數:這組函數管理、使用和取得證書、證書撤銷列表和證書信任列表。
      image
    • 低級消息函數:
      image
    • 簡化消息函數:
      image
  3. CSP:真正實行加密的獨立模塊,既可以由軟件實現也可以由硬件實現。但是他必須符合CryptoAPI接口的規范。
    image
  4. 創建密鑰容器,得到CSP句柄
    每一個CSP都有一個名字和一個類型,並且名字保證唯一。所以可以通過名字和類型得到一個CSP。然而,要想加密肯定需要密鑰,密鑰放在密鑰容器。密鑰容器並不是一開始就存在的,需要用戶去創建。下面是創建容器的代碼:
    if(CryptAcquireContext(
    &hCryptProv, // 返回CSP句柄
    UserName, // 密碼容器名
    NULL, // NULL時使用默認CSP名(微軟RSA Base Provider)
    PROV_RSA_FULL, // CSP類型
    0)) // Flag values
    {
    //以UserName為名的密鑰容器存在,那么我們已經得到了CSP的句柄
    printf("A crypto context with the %s key container \n", UserName);
    printf("has been acquired.\n\n");
    }
    else //如果密鑰容器不存在,我們需要創建這個密鑰容器
    {
    if(CryptAcquireContext(
    &hCryptProv,
    UserName,
    NULL,
    PROV_RSA_FULL,
    CRYPT_NEWKEYSET)) //創建以UserName為名的密鑰容器
    {
    //創建密鑰容器成功,並得到CSP句柄
    printf("A new key container has been created.\n");
    }
    else
    {
    HandleError("Could not create a new key container.\n");
    }
    } // End of else
  5. 使用CryptoAPI加密解密
    windows crypto API提供了對稱加密和非對稱加密,並且提供了各種加密、解密的算法,要使用相應的算法進行加密解密,只需要對生成密鑰的函數的相關參數改變一下即可。
    image

二、PKCS#11及CSP接口標准

  1. PKCS#11(簡稱P11)是針對密碼設備的接口指令標准。P11模型中重要的概念之一是slot,也稱為槽。一個slot為一個密碼設備對象。某個打開的slot會話稱之為session。Session之間存在不同的驗證權限。而同一個slot的不同的session之間存在操作的互相影響性,同時在某些狀況下,權限會發生同步。另外一個重要的概念是對象。P11中支持幾種重要的對象,如公鑰、私鑰、對稱密鑰,數據對象等。
  2. PKCS#11創建和支持下列對象:
    image
    PKCS#11的對象可根據其生命期長短的不同分成兩大類:一類是持久存儲的類對象,這類對象被保存在USB Key的安全存儲區域當中,直到應用程序主動刪除這些對象;另一類是會話對象,這類對象只存在於運行時建立的特定會話(Session對象)當中,一旦會話結束,這類對象也跟着被刪除。決定對象生命期的模板屬性是CKA_TOKEN,這是個布爾值,所有的對象都有這一屬性。當該值為TRUE時,該對象將被保存到Key內的存儲空間,否則,該對象保存在會話空間中,當會話結束后,該對象即銷毀。
  3. P11標准頒發了70余條指令。其中部分指令簡介如下表:
    image
    image
    image
    image
    image
  4. PKCS#11架構
    image

三、GMT 0016-2012

  1. 這個標准規定了基於PKI密碼體制的智能密碼鑰匙密碼應用接口,描述了密碼應用接口的函數、數據類型、參數的定義和設備的安全要求。
  2. 層次關系:智能密碼鑰匙密碼應用接口位於智能密碼鑰匙應用程序與設備之間,如下圖:
    image
  3. 設備的應用結構:一個設備中存在設備認證密鑰和多個應用,應用之間相互獨立。設備的邏輯結構如下圖:
    image
  4. 設備管理系列函數:
    image
  5. 訪問控制系列函數
    image
  6. 應用管理函數
    image
  7. 容器管理系列函數
    image
  8. 密碼服務系列函數
    image
    image

四、GMT 0018-2012

  1. 本標准的目標是為公鑰密碼基礎設施應用體系框架下的服務類密碼設備制定統一的應用接口標准,通過該接口調用密碼設備,向上層提供基礎密碼服務。為該類密碼設備的開發、使用及檢測提供標准依據和指導,有利於提高該類密碼設備的產品化、標准化和系列化水平。
  2. 范圍:本標准規定了公鑰密碼基礎設施應用技術體系下服務類密碼設備的應用接口標准,適用於服務類密碼設備的研制、使用,以及基於該類密碼設備的應用開發,也可用於指導該類密碼設備的檢測。
  3. 密碼設備應用接口在公鑰密碼基礎設施應用技術體系框架中的位置:在公鑰密碼基礎設施應用技術體系框架中,密碼設備服務層由密碼機、密碼卡、智能密碼終瑞等設備組成,通過本標准規定的密碼設備應用接口向通用密碼服務層提供基礎密碼服務。如下圖:
    image
    • 基礎密碼服務包括密鑰生成、單一的密碼運算、文件管理等服務。
    • 本標准采用C語言描述接口函數,無特別說明時,函數中參數的長度單位均為字節數。
  4. 設備管理類函數:
    • 打開設備:SDF_OpenDevice
    • 關閉設備:SDF_CloseDevice
    • 創建會話:SDF_OpenSession
    • 關閉會話:SDF_CloseSession
    • 獲取設備信息:SDF_GetDeviceInfo
    • 產生隨機數:SDF_GenerateRandom
    • 獲取私鑰使用權限:SDF_GetPrivateKeyAccessRight
    • 釋放私鑰使用權限:SDF_ReleasePrivateKeyAccessRight
  5. 密鑰管理類函數:
    • 導出 RSA 簽名公鑰:SDF_ExportSignPublicKey_RSA
    • 導出 RSA 加密公鑰:SDF_ExportEncPublicKey_RSA
    • 產生RSA非對稱密鑰對並輸出:SDF_GenerateKeyPair_RSA
    • 生成會話密鑰並用內部RSA公鑰加密輸出:SDF_GenerateKeyWithIPK_RSA
    • 生成會話密鑰並用外部RSA公鑰加密輸出:SDF_GenerateKeyWithEPK_RSA - 導人會話密鑰並用內部RSA私鑰解密:SDF_ImportKeyWithISK_RSA
    • 基於 RSA 算法的數宇倍封轉換:SDF_ExchangeDigitEnvelopeBaseOnRSA
    • 導出 ECC 簽名公鑰:SDF_ExportSignPublicKey_ECC
    • 導出 ECC 加密公鑰:SDF_ExportEncPublicKey_ECC
    • 產生ECC非對稱密鑰對並輸出:SDF_GenerateKeyPair_ECC
    • 生成會話密鑰並用內部ECC公鑰加密輸岀:SDF_GenerateKeyWithIPK_ECC - 生成會話密鑰並用外部ECC公鑰加密輸出:SDF_GenerateKeyWithEPK_ECC
    • 導入會話密鑰並用內部ECC私鑰解密:SDFJmportKeyWithlSKJECC
    • 生成密鑰協商參數並輸出:SDF_GenerateAgreementDataWithECC
    • 計算會話密鑰:SDF_GenerateKey WithECC
    • 產生協商數據並計算會話密鑰:SDF—GenerateAgreementDataAndKeyWithECC
    • 基於 ECC算法的數字信封轉換:SDF_ExchangeDigitEnvelopeBaseOnECC
    • 生成會話密鑰並用密鑰加密密鑰加密輸出: SDF_GenerateKeyWithKEK
    • 導入會話密鑰並用密鑰加密密鑰解密:SDF_ImportKeyWithKEK
    • 銷毀會話密鑰:SDF_DestroyKey
  6. 非對稱算法運算類函數
    • 部公鑰 RSA 運算:SDF_ExternalPublicKeyOperation_RSA
    • 內部公鑰 RSA 運算:SDF_InternalPublicKeyOperation_RSA
    • 內部私鑰 RSA 運算:SDF_InternalPrivateKeyOperation_RSA
    • 外部密鑰 ECC 驗證:SDF_ExternalVerify_ECC
    • 內部密鑰 ECC 簽名:SDF_InternalSign_ECC
    • 內部密鑰 ECC 驗證:SDF_InternalVerify_ECC
    • 外部密鑰 ECC 加密:SDF_ExternalEncrypt_ECC
  7. 對稱算法運算類函數
    • 對稱加密:SDF_Encrypt
    • 對稱解密:SDF_Decrypt
    • 計算MAC:SDF_CalculateMAC
  8. 雜湊運算類函數
    • 雜湊運算初始化:SDF_HashInit
    • 多包雜湊運算:SDF_HashUpdate
    • 雜湊運算結束:SDF_HashFinal
  9. 安全要求
    (1)基於本標准設計、開發的密碼設備在密鑰管理方面,應滿足以下要求:
    • 設備密鑰的使用不對應用系統開放;
    • 密鑰必須用安全的方法產生並存儲;
    • 在任何時間、任何情況下,除公鑰外的密鑰均不能以明文形式出現在密碼設備外;
    • 密碼設備內部存儲的密鑰應具備有效的密鑰保護機制,防止解剖、探測和非法讀取;
    • 密碼設備內部存儲的密鑰應具備權限控制機制,防止非法使用和導出。
      (2)密碼服務要求:
    • 使用的密碼算法應得到國家密碼主管部門的批准;
    • 使用國家密碼主管部門認可的密碼算法芯片;
    • 本標准所列的所有接口函數均應能被應用系統任意調用。
      (3)設備狀態要求:
    • 密碼設備應具有初始和就緒兩個狀態;
    • 未安裝設備密鑰的密碼設備應處於初始狀態,已安裝設備密鑰的密碼設備應處於就緒狀態;
    • 在初始狀態下,除可讀取設備信息、設備密鑰的生成或恢復操作外,不能執行任何操作,生成或恢復設備密鑰后,密碼設備處於就緒狀態;
    • 在就緒狀態下,除設備密鑰的生成或恢復操作外,應能執行任何操作;
    • 在就緒狀態下進行的密鑰操作,設備操作員應經過密碼設備的認證。
      (4)其他要求:
    • 密碼設備應有安全機制和措施,保證密鑰在生成、安裝、導入、存儲、備份.恢復及銷毀整個生存期間的安全,此安全機制可由設備廠商自行設計實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM