一種基於智慧卡登入Windows系統的實現方式

來源:互聯網
上載者:User
A Kind of Method of Implementing Windows Logon Based on Smart Card LIANG Hao (Third Research Institute of Ministry of Public Security, Shanghai 200031) Abstract: Design a smart card logon with Windows operating system Windows Credential Provider program is implemented, the

program automatically detects the smart card with the plug, PIN, user identification card, smart card reader notes saved automatically submit login information and features. In this design model, describes the design of Windows Credential Provider in the UI interface and replace the username and password login method. 
  Key words: smart card; credential provider; authentication; login 
  隨著Windows作業系統的發展,Windows作業系統開機登入程式也在不斷改進。在Windows Vista和Windows 7作業系統中,微軟取消了Windows NT/2000中互動式登入支援的GINA(圖形標識與身分識別驗證)模型,使用了Windows Credential Provider(票據提供者)模型介面。相對於GINA,Windows Credential Provider具有高安全性、高靈活性的特點。一些開發商在此技術上開發了一些Windows Credential Provider,如指紋Credential Provider,提高了使用者登入系統的安全性。這裡介紹一種使用智慧卡登入作業系統的實現方式。 
  1 設計方案 
  實現Windows Credential Provider所使用的智慧卡為自主研發的卡片,其API包括檢測卡片插拔、數字 PIN 碼校正、檔案儲存體、密碼運算等功能。本文的智慧卡已格式化,具有儲存設計方案所需的對稱金鑰、二進位檔案等資料。 
  Windows Credential Provider預設使用的是使用者名稱和密碼進行身份認證。本文以智慧卡檔案作為載體,加密儲存電腦賬戶的使用者名稱和密碼。使用Windows登入必須先通過智慧卡數字 PIN 碼認證後才得到解密使用者名稱和密碼的許可權。相對於原只用使用者名稱密碼登入方式,智慧卡登入具有雙因素認證的特點,大大提高了Windows作業系統登入過程的安全性。 
  2 程式開發 
  設計方案將程式按模組分為2部分:一是使用者名稱密碼綁定程式;二是Windows Credential Provider COM庫。

     2.1 綁定使用者名稱密碼程式 
  使用者名稱密碼綁定程式,完成一些智慧卡登入Windows的初始化工作,即輸入系統使用者名稱密碼並寫入到智慧卡,實現系統密碼和智慧卡密碼的綁定操作。

  必須綁定使用者名稱密碼的智慧卡才能使用智慧卡登入Windows系統。完成綁定後,使用者名稱和密碼都加密儲存到智慧卡中,並長期有效。在系統不重裝的前提下,以下情況可能導致正常的綁定無效:必須綁定使用者名稱密碼的智慧卡才能使用智慧卡登入Windows系統。完成綁定後,使用者名稱和密碼都加密儲存到智慧卡中,並長期有效。在系統不重裝的前提下,以下情況可能導致正常的綁定無效: 
  1)通過使用者名稱密碼綁定程式刪除綁定。 
  2)使用者在綁定後修改了原使用者名稱密碼,導致綁定無效。 
  相對地,針對使用者修改密碼的情況,實現GINA程式相關介面可判斷並自動修改綁定關係;而Windows Credential Provider沒有相關的介面,因此,安裝一個使用者名稱密碼綁定程式的輔助服務,該服務輪詢檢查綁定的使用者名稱和密碼是否有效,當綁定關係發送變化時,服務程式調用綁定程式重新更新綁定。 
  一般的,使用者名稱密碼綁定程式作為初始化工具,必須通過授權才可使用。因此,在使用使用者名稱密碼綁定程式前需通過智慧卡的數字 PIN 碼校正。完成身份認證後,使用者名稱密碼綁定程式將使用者錄入的使用者名稱、密碼、網域名稱加以校正。 
  使用者名稱密碼綁定程式按功能分為兩個部分:第一,當開啟使用者名稱密碼綁定程式時,彈出輸入對話方塊輸入數字 PIN 碼,進行數字 PIN 碼校正,完成使用者身份認證過程;第二,校正使用者身份後,彈出使用者登入憑據綁定輸入框。為了簡單說明設計方案,使用者名稱密碼綁定程式有且只能綁定一條Windows登入憑據。Windows登入憑據資訊包括使用者名稱、密碼和網域名稱(如果已經加入域的話)。使用者確定綁定資訊時,使用者名稱密碼綁定程式將登入憑據資訊通過智慧卡API加密儲存到智慧卡檔案系統中,其中加密金鑰是智慧卡初始化時寫入的對稱金鑰。至此,使用者名稱密碼綁定程式對智慧卡的初始化工作就完成了。    2.2 Windows Credential COM庫 
  Windows Credential Provider部分是設計方案的核心部分。它包括了自訂使用者登入介面的介面以及處理和提交使用者登入憑據的介面。設計方案的Windows Credential Provider通過新COM庫的方式增量註冊到Windows作業系統中,並不卸載Windows作業系統內建的Credential Provider。就是說,使用者在登入Windows時可以選擇原Windows登入方式或選擇智慧卡登入。 在Windows Vista的登入過程中,從介面上可區分為兩個階段:標題圖片未選中階段和標題圖片被選中後顯示密碼輸入框階段。 標題圖片未選中階段,主要顯示標題圖片和登入使用者名稱。智慧卡Windows Credential Provider定製了以智慧卡為圖片的標題圖片。 通過Windows Credential Provider可設定定製的智慧卡

登入憑據的按鈕,使用者點擊智慧卡圖片的按鈕即可使用智慧卡登入電腦。 
  智慧卡圖片以資源方式插入到DLL中,資源ID為IDB_TILE_IMAGE,在ICredentialProviderCredential介面中的GetBitmapValue函數添加代碼: 
  HBITMAP hbmp = LoadBitmap(HINST_THISDLL, MAKEINTRESOURCE(IDB_TILE_IMAGE)); 
  *phbmp = hbmp; 
  預設的Windows Credential Provider標題圖片下方為顯示登入使用者名稱,智慧卡Windows Credential Provider將登入使用者名稱修改了智慧卡是否插入提示資訊。static const FIELD_STATE_PAIR s_rgMessageFieldStatePairs[] = 
  { 
  { CPFS_DISPLAY_IN_BOTH, CPFIS_NONE }, // SMFI_TILEIMAGE 
  { CPFS_DISPLAY_IN_BOTH, CPFIS_NONE }, // SMFI_MESSAGE 
  { CPFS_DISPLAY_IN_DESELECTED_TILE, CPFIS_NONE },// SMFI_STATUS 
  }; 
  標題圖片未選中階段將原使用者名稱輸入的介面枚舉資訊替換為數字 PIN 碼輸入框,並添加數字 PIN 碼輸入提示文本(如數字 PIN 碼輸入錯誤等資訊)。 數字 PIN 碼輸入框使用原Windows輸入框的類型和風格。 
  static const CREDENTIAL_PROVIDER_FIELD_DEscriptOR s_rgCredProvFieldDescriptors[] = 
  { 
  { SFI_TILEIMAGE, CPFT_TILE_IMAGE, L"Image" }, 
  { SFI_USERNAME, CPFT_LARGE_TEXT, L"Username" }, 
  { SFI_STATUS, CPFT_SMALL_TEXT, L"States" }, 
  { SFI_PIN, CPFT_PASSWORD_TEXT, L"Pin" }, 
  { SFI_TIP_TEXT, CPFT_SMALL_TEXT, L"Tip" }, 
  { SFI_SUBMIT_BUTTON, CPFT_SUBMIT_BUTTON, L"Submit" }, 
  }; 
  使用者在登入時選中智慧卡標題圖片時,即可調用智慧卡登入對應的Windows Credential Provider介面函數,並調用ICredentialProviderCredential:: SetSelected函數,在SetSelected函數中判斷智慧卡是否已經插入,若插入則允許切換到輸入數字 PIN 碼框介面。 
  if(CheckKeyIsInsert() == true) 
  {SetConnect(); 
  } 
  使用者在數字 PIN 碼輸入框完成數字 PIN 碼鍵入後,智慧卡Windows Credential Provider調用ICredentialProviderCredential:: GetSerialization函數。在GetSerialization函數中調用智慧卡API校正SFI_PIN對應控制項的數字 PIN 碼是否正確,若檢驗失敗,設定SFI_TIP_TEXT對應的提示文字為數字 PIN 碼校正結果提示資訊。若校正成功,則讀取和解密檔案系統中加密儲存的使用者登入資訊,並返回到GetSerialization函數的輸出參數中。返回的使用者登入資訊將被Windows登入應用程式驗證,若結果匹配則結束登入介面現在Windows案頭,否則提示錯誤資訊。 
  完成Windows Credential Provider後,需將Windows Credential Provider庫拷貝到系統硬碟System32目錄,並通過註冊表註冊到Windows系統。 
  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{ed756d7f-139d-403f-aea8-82e97a83d184}] 
  @="SMARTCARD_CredentialProvider" 
  [HKEY_CLASSES_ROOT\CLSID\{ad7a7d7f-139d-403f-aea8-82e97a83d184}] 
  @=" SMARTCARD _CredentialProvider" 
  [HKEY_CLASSES_ROOT\CLSID\{ad7a7d7f-139d-403f-aea8-82e97a83d184}\InprocServer32] 
  @=" SMARTCARD _CredentialProvider.dll" 
  "ThreadingModel"="Apartment" 
  3 結束語 
  至此,我們介紹了一種通過智慧卡登入Windows作業系統的方式,並簡單介紹了Windows Credential Provider的關鍵函數。通過上述方法,還得到了一種將使用者名稱密碼登入方式轉換為另一種登入方式的思路(如指紋登入、認證登入等)。為定製更安全、更方便、更友好的Windows登入程式打下了基礎。 
  參考文獻: 
  [1] Windows Vista Sample Credential Providers Overview.doc[EB]. 
  [2] Credential Providers for PDC - Final.doc[EB]. 
  [3] 陳銳,蔣澤軍,陳福,等.基於Credential Provider的身份認證模型的研究與實現[J].航空計算技術,2010(3):1-4.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.