色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過對驅動層硬件插拔的研究實現USB安全的設計

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-06-05 08:14 ? 次閱讀

大多數普通安全U盤通過使用軟件實現安全U盤加密功能。在使用過程中,用戶需要打開專用的U盤瀏覽器或管理工具等,不但操作不方便,而且不符合USB設備使用習慣和人性化設計。

本文通過對驅動層硬件插拔(PNP)的研究,PNP是由Microsoft提出的,英文Plug and play的縮寫,中譯即插即用,意思是系統自動偵測周邊設備和板卡并自動安裝設備驅動程序,作到插上就能用,無須人工干預,是Windows自帶的一項技術。所謂即插即用是指將符合PNP標準的PC插卡等外圍設備安裝到電腦時,操作系統自動設定系統結構的技術。這就是說,當用戶安裝新的硬件時,不必再設置任何跳線器開關,也不必用軟件配置中斷請求(IRQ)、內存地址或直接存儲器存取(DMA)通道,Windows會向應用程序通知硬件設備的新變化,并會自動協調IRQ、內存地址和DMA通道之間的沖突。

在分析了Windows DDK/FSD驅動開發技術、卷上過濾驅動技術,提出了在Windows系統插入USB設備時,自動掛載符合規定卷格式的USB設備,映射為本地磁盤,USB(Universal Serial Bus)即“通用串行總線”是一種應用在計算機領域的新型接口技術。USB的拓撲結構中居于核心地位的是Host(也稱為主機)。任何一次USB的數據傳輸都必須由主機來發起和控制,所有的USB外設都只能和主機建立連接,任何兩個外設之間或是兩個主機之間無法直接通信。而目前,大量的扮演主機角色的是個人電腦PC。隨著USB應用領域的逐漸擴大,對于USB的期望也越來越高。我們希望USB能應用在各種計算機領域中,希望能通過PDA等移動設備直接和USB外設通信,使得USB能應用在沒有PC的領域中。

1 原理與架構

系統分為驅動層和應用層,驅動層包括一個卷過濾驅動程序和一個文件系統過濾驅動;應用層包括一個應用程序和與驅動交互的dll。應用層是隱藏界面的應用程序。卷過濾驅動對USB盤的(PNP)動作識別,讀移動硬盤卷的頭為512 B,對特定標識識別,如果不符合卷標示,則可采用禁用或放行等;如果符合卷格式和標識,則對此卷進行映射。

普通U盤使用前需要格式化,物理U盤上的數據是隨機的數值。密碼算法采用基于口令的密碼系統 (RFC2898),口令和鹽(salt)結合產生密鑰。鹽可看作是對口令導出的一個大密鑰集合的索引。鹽和迭代次數構成了PKCS#5v1.5中基于口令加密基礎。系統總體架構序列圖如圖1所示。

通過對驅動層硬件插拔的研究實現USB安全的設計

加密算法可采用AES-256、Serpent、Twofish等,解密時通過判斷廠商標識以及CRC-32校驗和是否正確,在此過程中在權限注冊區讀入相應的注冊信息,如GUID和廠商標識等。如上述過程正確,則執行正確的卷映射過程。

2 研究與實現

系統應用層主要由三個線程組成,主線程是應用程序,剩下卷映射線程和卸下卷(unmount)線程分別用來在USB存儲設備做PNP時對本地盤進行卷映射和卸下卷。線程和驅動層采用事件通信機制。本系統定位于移動存儲設備,包括移動硬盤、U盤及移動存儲卡等移動存儲介質。密文區是從內部可信計算機拷貝數據到USB存儲設備,數據在后臺加密處理后存放的區域;權限注冊區則寫入GUID和必要的廠商、運行權限、內外網策略等。

卷映射線程收到底層USB的PNP動作時,首先得到運行環境,根據運行環境得到USB存儲設備讀寫權限,然后根據相關密碼、密鑰等參數通過DEVICEIOCONTROL通知驅動創建本地虛擬盤,最后廣播DBT_DEVICEARRIVAL消息通知操作系統。

集中注冊與授權,使用前必須經過授權中心統一注冊與授權,包括格式化、實名注冊、標識密級、指定授權計算機、是否采用口令保護等。授權后的移動存儲介質在涉密計算機上能正常使用,當未授權的移動存儲設備接入計算機時,系統可自動關閉USB端口,使未授權移動存儲介質無法在涉密計算機上使用。

對于正確安裝了移動存儲安全系統客戶端的計算機,客戶端自動上報該機狀態,完成到控制臺服務器注冊功能,有效防止非法用戶安裝客戶端程序。靈活的注冊策略,可設定移動存儲介質允許的計算機或組;管理員可隨時更改移動存儲介質注冊策略和信息,包括遠程策略變更、掛失和注銷等;外出拷貝功能是將COPY到U盤內安全存儲的數據與外界沒有安裝客戶端程序的計算機進行數據交互使用。

應用層完成對移動存儲設備的格式化工作。對卷起始位置寫入密碼、校驗和等信息,提供了FAT32和NTFS兩種文件系統格式。在驅動中對移動存儲設備做卷映射,創建類型為FILE_DEVICE_DISK卷過濾驅動,使用不同的盤符。在IRP_MJ_WRITE和IRP_MJ_READ請求例程中進行加解密。在IRP_MJ_WRITE分發例程中把相關的IRP存入隊列。在新創建的系統線程內進行卷加密。在IRP_MJ_READ中進行解密。

注冊主要由應用層注冊工具完成,可由用戶選擇FAT32或NTFS格式。注冊流程如下:訪問移動存儲盤,輸入需要注冊信息。注冊信息包括:移動存儲盤密碼、標簽名、安全等級、客戶標識名、分區個數、內網移動存儲策略、外網移動存儲策略、1~5等級的移動存儲策略。

插入安全U盤后,得到處理環境信息:是否為有效設備、是否有客戶端代理、客戶標識匹配、在內網否、安全等級是否1~5,然后決定應用不同策略。驅動只要掛載存儲卷的UpperFilter即可完成卷的加解密任務。

在PnP技術出現之前,中斷和I/O端口的分配是由人手工進行的,您想要這塊聲卡占用中斷5,就找一個小跳線在卡上標著中斷5的針腳上一插。這樣的操作需要用戶了解中斷和I/O端口的知識,并且能夠自己分配中斷地址而不發生沖突,對普通用戶提出這樣的要求是不切實際的。PnP技術就是用來解決這個問題的,PnP技術將自動找到一個不沖突的中斷和I/O地址分配給外部設備,而完全不需要人工干預。但是如果您讀懂了上面關于中斷沖突的那一部分,您就應該了解,在中斷資源非常緊張的今天,即使是PnP技術,也不一定能找到一個合適的中斷分配給您剛剛插入的設備,所以盡量釋放那些沒有必要的中斷,對PnP正常工作也是很有幫助的。

卷過濾驅動在IRP_MJ_PNP請求時監控設備的插拔消息,程序判斷是否是指定的卷格式,如發現是移動存儲設備,則用DeviceIoControl與驅動層通信。通過對新加卷的監控,實現對移動存儲設備的加解密。應用層通過DeviceIoControl與應用層的通信獲得用戶密鑰和權限策略。

在文件系統驅動層映射卷的流程如下:應用程序調用ZwCreateFile或IoCreateFileSpecifyDeviceObjectHint,I/O管理器確定請求的目標是哪個邏輯卷,檢查是否設置了VPB_MOUNTED。如此卷在系統引導后未被卷映射,則I/O管理器發送卷映射請求(IRP_MN_MOUNT_VOLUME)。

對移動存儲設備的格式化可分為FAT32和NTFS兩種格式。卷過濾驅動監控系統的PNP行為,如移動介質頭512 B符合卷頭格式,則使用事件通知應用層對移動介質卷映射,卷映射線程將相關參數(盤符、密碼、磁盤屬性)等傳遞到文件系統驅動,創建一個FILE_DEVICE_DISK類型的過濾設備;然后創建一個線程,在線程中應用ZwCreateFile打開卷設備Handle,讀取卷頭信息,對卷頭信息進行驗證,如驗證卷頭信息成功,則創建相應盤符的符號鏈接;對USB設備加密模式為XTS;卸下卷線程接到拔下USB存儲器通知事件后,對相應盤符進行卸載,清理相關資源。

應用層包括對卷格式化功能,對移動USB設備合法性驗證、得到USB運行環境信息、根據策略信息對USB設備進行讀寫、禁用等控制。在USB設備上單開辟一個區域,用來存取注冊信息以及寫入注冊信息和讀取注冊信息,生成GUID寫入USB設備的唯一標示,完成卷映射功能。

安全U盤總體設計序列圖如圖2所示。

通過對驅動層硬件插拔的研究實現USB安全的設計

在PNP發生時,驅動層和應用層通過事件進行通信。對卷映射和卸下卷過程各啟動一個線程等待PNP事件發生。首先驗證卷頭格式,卷頭信息讀到RAM中。卷頭64 B是生成密鑰所需的鹽(salt),驅動層解密讀入的標準卷頭、解密過程中的所有數據保存在RAM中。在此過程中需要得到如下參數:

卷頭導出函數用的PRF參數(見PKCS #5 v2.0)可為:HMAC-SHA-512、HMAC_RIPEMD-160等;廠商標示密碼和讀入的鹽值傳給卷頭密鑰導出函數,生成頭解密密鑰和扇區解密密鑰;使用的加密算法為AES-256;解密時對照廠商標示密碼及校驗和,密鑰用來解密卷上的扇區。

主要數據結構和參數如下:

(1)卷映射數據結構

typedef struct

{

Int nReturnCode; //底層sys返回碼

Short wszHsVolume[MAX_PATH]; //卷名稱

Password VolumePassword; //用戶密碼

BOOL bCache;//是否在驅動中緩存密碼

Int nDosDriveNo; //需要卷映射的盤符號

Int BytesPerSector; //扇區字節數

BOOL bSystemVolume; //是否為系統卷

BOOL bPersistenVolume; //是否為隱藏卷

BOOL bMountReadOnly;//是否映射為隱藏卷格式

BOOL bMountRemovable;//是否映射為可移動

//存儲設備

} MOUNT_STRUCT;

(2)設備信息結構

typedef struct _SECDEVICEINFO

{

CHAR szProvider[SD_MAX_PROVIDER_LEN];

//設備提供者名稱

DWORD dwDeviceType; //設備類型

CHAR szDeviceID[SD_MAX_DEVICE_ID_LEN];

//設備唯一標識

__int64 dwDeviceCapacity; //設備容量

} SECDEVICEINFO, *PSECDEVICEINFO;

(3)策略數據結構

typedef struct _POLICYDATA

{

BOOL bEnableSecPart; //是否啟動保密區

BOOL bReadSecPart; //是否可讀保密區

BOOL bWriteSecPart; //是否可寫保密區

BOOL bEncryptSecPart; //是否加密保密區

BOOL bEnableExchPart; //是否啟用交換區

BOOL bReadExchPart; //是否可讀交換區

BOOL bWriteExchPart; //是否可寫交換區

BOOL bEncryptExchPart; //是否加密交換區

BOOL bExchPartToSecPart;

//是否允許從交換區復制到保密區

BOOL bsechPartToSecPart;

//是否允許從保密區復制到交換機

} POLICYDATA,*PPOLICYDATA;

應用層創建雙線程,等待PNP消息,如接入USB盤符和特定卷格式,則對卷做相應卷映射和卸下卷。

對卷卷映射函數:

Int MountVolume (

int driveNo,

char *volumePath,

Password *password,

MountOptions *mountOptions,

BOOL bReportWrongPassword );

對卷卸下卷函數:

BOOL UnmountVolume

(int nDosDriveNo, BOOL forceUnmount );

創建內存中卷格式:

int VolumeWriteHeader(char*header,int ea,int mode,Password* password,

char*masterKey,

PCRYPTO_INFO*retInfo,

BOOL bWipeMode );

讀入USB卷頭:

int VolumeReadHeader(char*encryptedHeader,Password);

經過測試人員測試和客戶現場應用,本系統達到了良好的應用效果,從驅動層到應用層都運行良好。系統支持FAT32和NTFS格式,對容量較大的USB移動存儲設備和容量較小的U盤都有較好的使用和保密果。WINDOWS NT則更進一步,它可以檢測出SCSI設備及其他一些硬件,到了WINDOWS95/98,則幾乎可以實現全自動的安裝和系統的動態重配置。盡管WINDOWS95不可能對所有舊設備都能正確地識別,甚至有時也會求助于用戶,但就即插即用本身而言,這已經是一個真正的飛躍了。現在的WIDNOWS98/2000在PNP方面又得到進一步的發展。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7952

    瀏覽量

    264937
  • WINDOWS
    +關注

    關注

    4

    文章

    3552

    瀏覽量

    88824
  • 電腦
    +關注

    關注

    15

    文章

    1708

    瀏覽量

    68906
收藏 人收藏

    評論

    相關推薦

    ESP32-S2重復插拔USB,會導致USB驅動崩潰怎么處理?

    :https://github.com/leeebo/esp32s2_usb 僅保留USB MSC以及VFS部分,以實現類似U盤的功能,測試中發現重復插拔
    發表于 06-21 11:53

    基于USB數據采集系統的研究與設計--ResearchandDesignofDataAequisitio

    傳統總線不足之處,在此基礎上研究了基于USB的數據采集系統,根據系統應該達到的技術指標,從而確定系統的整體框架和各個部分芯片的選擇。整個系統包括硬件設計和軟件設計兩部分,實現數據高速轉
    發表于 06-10 00:57

    通過USBN9603/P89C51平臺實現USB接口硬件加密

    要的實現。WDM支持USBl.l協議,并為用戶開發自己的用戶驅動程序提供USB驅動程序接口USBDI。USB用戶
    發表于 09-19 09:26

    如何通過硬件實現安全CAN通信網絡的方式

    汽車在往智能化方向發展,節點間通信的安全性變得越來越重要。當下是在報文中添加驗證信息實現通信安全,這樣不僅浪費寶貴的通信資源,還增加軟件復雜度。本文將介紹一種通過硬件
    發表于 02-26 06:06

    怎么通知應用cp2102芯片的熱插拔狀態?

    在用iMX6UL開發板,U盤可以從內核層面實現插拔。我現在有個USB轉串口的設備(cp2102芯片),不知道有沒有朋友知道怎么通知應用該設備的熱
    發表于 01-11 06:31

    USB轉串口熱插拔無法實現是為什么?

    在用iMX6UL開發板,U盤可以從內核層面實現插拔。我現在有個USB轉串口的設備(cp2102芯片),不知道有沒有朋友知道怎么通知應用該設備的熱
    發表于 01-11 07:40

    重復插拔USB有時候會導致USB驅動崩潰要怎么處理?

    ://github.com/leeebo/esp32s2_usb僅保留USB MSC以及VFS部分,以實現類似U盤的功能,測試中發現重復插拔USB
    發表于 02-21 06:20

    安全刪除USB設備的軟件

    USB Safely Remove是一款支持熱插拔裝置和迅速切斷一個公用的熱插拔裝置的軟件,USB Safely Remove是一個可以將USB
    發表于 04-23 09:31 ?15次下載
    <b class='flag-5'>安全</b>刪除<b class='flag-5'>USB</b>設備的軟件

    ZigBee的MAC安全研究

    對ZigBee協議MAC安全性進行了研究,分析了MAC使用的安全模式,提供的安全服務以及
    發表于 07-08 15:24 ?17次下載

    嵌入式Linux下可插拔輸入驅動機制研究

    本文介紹了嵌入式linux下的輸入驅動接口,詳細分析了輸入驅動中如何實現插拔機制,描述了USB人機接口設備和可
    發表于 07-27 15:38 ?16次下載

    WinCE_Net系統下USB總線驅動程序實現研究

    WinCE_Net系統下USB總線驅動程序實現研究
    發表于 10-25 09:52 ?15次下載
    WinCE_Net系統下<b class='flag-5'>USB</b>總線<b class='flag-5'>驅動</b>程序<b class='flag-5'>實現</b>的<b class='flag-5'>研究</b>

    詳細介紹Linux USB驅動工作流程

    在Linux驅動中,USB驅動處于最底層的是USB主機控制器硬件,在其之上運行的是USB主機控制
    發表于 04-29 14:52 ?2282次閱讀
    詳細介紹Linux <b class='flag-5'>USB</b><b class='flag-5'>驅動</b>工作流程

    如何使用51單片機控制SL811HS實現USB主機的硬件設計和底層驅動的編寫

    本文介紹了51單片機控制SL811HS實現USB主機的硬件設計和底層驅動的編寫。其中,底層驅動部分主要講述了
    發表于 12-20 17:27 ?3次下載
    如何使用51單片機控制SL811HS<b class='flag-5'>實現</b><b class='flag-5'>USB</b>主機的<b class='flag-5'>硬件</b>設計和底層<b class='flag-5'>驅動</b>的編寫

    MOSFET 安全工作區對實現穩固熱插拔應用的意義所在

    MOSFET 安全工作區對實現穩固熱插拔應用的意義所在
    發表于 03-20 08:32 ?16次下載
    MOSFET <b class='flag-5'>安全</b>工作區對<b class='flag-5'>實現</b>穩固熱<b class='flag-5'>插拔</b>應用的意義所在

    linux系統的驅動實現原理

    原理就是將硬件操作的接口全都放到驅動鏈表上,在驅動實現device的open、read、write等操作。當然這樣做也有弊端,就是
    發表于 11-02 09:59 ?917次閱讀
    主站蜘蛛池模板: 22eee在线播放成人免费视频| 精品精品国产自在现拍| 女人麻豆国产香蕉久久精品| www黄色com| 香蕉久久夜色精品国产小优| 久久精品国产亚洲AV影院| BL全肉多攻NP高H| 无码137片内射在线影院| 亚洲欧洲日韩天堂无吗| 精品国产影院| 99re28久久热在线观看| 四虎国产精品永久一区高清| 九九热在线视频精品店| 亚洲日韩在线天堂一| 毛片网站在线观看| 国产高清美女一级a毛片久久w| 亚洲日韩有码无线免费| 青娱乐国产精品视频| 国产在线观看码高清视频| 970女主播电台歌曲| 小小水蜜桃视频高清在线观看免费| 久久影院中文字幕| 国产99在线视频| 18禁无遮遮挡羞漫画免费阅读 | 美国一级大黄一片免费的网站| 古代荡乳尤物H妓女调教| 中国老太60old mantv| 色淫阁色九九| 美女pk精子4| 国内精品一级毛片免费看| qovd伦理| 真实国产精品视频国产网| 午夜影院一区二区三区| 欧美高清18| 久久全国免费观看视频| 国产精品久久久久久久久无码| 99热国产这里只有精品6| 亚洲中文字幕在线精品| 忘忧草在线影院WWW日本动漫| 男男校园园bl文全肉高h寝室| 好姑娘社区在线视频|