siemens x
傳感器

微軟應(yīng)用編程接口在柔性加工單元中的運(yùn)用

2025China.cn   2008年06月29日
1、密碼學(xué)的基本概念
  數(shù)據(jù)加密或稱數(shù)據(jù)編碼就是給定初始值利用某種算法把明碼文本轉(zhuǎn)換成一種編碼文件,編碼文件只有通過(guò)解碼之后才能閱讀。數(shù)據(jù)加密的實(shí)現(xiàn)手段則稱為加密技術(shù)或編碼技術(shù)。給定的初始值也稱為密鑰。根據(jù)密鑰的特點(diǎn),密碼體制分為對(duì)稱和非對(duì)稱密碼體制。
  對(duì)稱密碼體制也稱私鑰或傳統(tǒng)密碼體制,微軟密碼接口技術(shù)中也稱會(huì)話密鑰(Session Key)。該體制中加密密鑰和解密密鑰是一樣的,其算法快,但需要找到一種安全傳送密鑰的通道。非對(duì)稱密鑰體制也稱雙鑰或公鑰密碼體制,該體制中加密密鑰和解密密鑰是不一樣的。每個(gè)用戶都有兩把密鑰:加密密鑰和解密密鑰。其中加密密鑰公開,解密密鑰由自己保存。用戶A若要向B發(fā)送明文,只要利用B的公開密鑰對(duì)明文加密。而B收到密文后利用只有他掌握的解密密鑰解密就可得到明文。其中私鑰密碼體制根據(jù)對(duì)明文加密方式的不同可分為流密碼和分組密碼。流密碼算法利用密鑰流的第i個(gè)元素對(duì)明文的第i個(gè)字符加密。分組密碼算法則將明文分成n組有m個(gè)字符的數(shù)組,每組明文在同一個(gè)密鑰流的控制下變換成p個(gè)字符的密文組。由于兩種體制下算法復(fù)雜度不同,在軟件實(shí)現(xiàn)中,私鑰流密碼DES(數(shù)據(jù)加密標(biāo)準(zhǔn))大約比公鑰RSA(1977年由Rivest、Shamir和Adleman提出)算法快100倍。
  數(shù)字簽名是公鑰密碼體制下的一個(gè)重要應(yīng)用。數(shù)字簽名是綁定在明碼上的一段消息串,其表現(xiàn)手段不同于手寫簽名或印簽,但它們的作用基本一致。即都能保證明碼發(fā)送后的完整性和驗(yàn)證簽名者。應(yīng)用RSA公鑰體制進(jìn)行數(shù)字簽名時(shí),若A要向B送去信息m,A可用A保密的解密密鑰DA對(duì)m進(jìn)行加密得到DA(m),再用B的公開密鑰EB對(duì)DA(m)進(jìn)行加密得最終密文,B收到密文后先用他自己掌握的解密密鑰DB對(duì)密文進(jìn)行解密得到中間密文DA(m),再用A的公開密鑰EA對(duì)中間密文DA解密得到明文。由于最終密文只有A才能產(chǎn)生,B無(wú)法偽造或修改密文,所以A不能抵賴,這樣達(dá)到簽名認(rèn)證的目的。

2、密碼應(yīng)用編程接口編程模式與微軟密碼系統(tǒng)
2.1 密碼應(yīng)用編程接口編程模式
  密碼應(yīng)用編程接口工作模式類似于Windows圖形設(shè)備接口GDI工作模式。密碼應(yīng)用編程接口提供了一組獨(dú)立于密碼服務(wù)提供商(Cryptographic Service Provider)的標(biāo)準(zhǔn)密碼指令集,在應(yīng)用程序與密碼服務(wù)提供商之間提供一個(gè)環(huán)境外殼,負(fù)責(zé)應(yīng)用程序的密碼服務(wù)要求與執(zhí)行密碼應(yīng)用程序系統(tǒng)中的密碼功能之間的轉(zhuǎn)換。所有加密操作均由密碼服務(wù)提供商來(lái)完成,包括加密數(shù)據(jù)或數(shù)字簽名和用戶私鑰保護(hù)等。密碼服務(wù)提供商與圖形設(shè)備驅(qū)動(dòng)程序類似,是可根據(jù)需要進(jìn)行增刪的獨(dú)立模塊。密碼應(yīng)用編程接口的外殼模式將應(yīng)用程序分隔成了用戶態(tài)與核心態(tài)。應(yīng)用程序在用戶態(tài)下禁止直接與密碼服務(wù)提供商通信,而是交給作為操作系統(tǒng)部分的密碼應(yīng)用編程接口核來(lái)完成。

2.2 微軟信息密碼系統(tǒng)
  微軟信息密碼系統(tǒng)結(jié)構(gòu)由三部分組成,它們分別是密碼應(yīng)用程序、操作系統(tǒng)和密碼服務(wù)提供商(CSP)。如圖1所示。


圖1 微軟信息密碼系統(tǒng)體系結(jié)構(gòu)

  圖中密碼服務(wù)提供商是真正完成密碼工作的獨(dú)立模塊。理想的CSP應(yīng)完全獨(dú)立于具體應(yīng)用程序,這樣任何給定應(yīng)用能運(yùn)行在多種CSP上。一種CSP最少由動(dòng)態(tài)連接庫(kù)和簽名文件組成。簽名文件保證操作系統(tǒng)識(shí)別CSP。操作系統(tǒng)定期認(rèn)證簽名確保CSP沒被篡改過(guò)。而動(dòng)態(tài)連接庫(kù)中包含了一系列密碼服務(wù)程序的具體實(shí)現(xiàn)。例如微軟RSA基本服務(wù)提供商提供的動(dòng)態(tài)庫(kù)文件為和一個(gè)簽名文件,它是和視窗操作系統(tǒng)綁定在一起的。當(dāng)安裝新的CSP時(shí),服務(wù)提供商的安裝文件將自動(dòng)修改系統(tǒng)的配置文件,同時(shí)該CSP的密碼應(yīng)用編程接口的配置信息將存儲(chǔ)在注冊(cè)表的本地機(jī)器位置。每一個(gè)密碼服務(wù)提供商都負(fù)責(zé)管理自己的密鑰庫(kù),該密鑰庫(kù)可作為CSP為每個(gè)用戶創(chuàng)建的永久性密鑰的倉(cāng)庫(kù)。每個(gè)密鑰庫(kù)可有一個(gè)或多個(gè)存儲(chǔ)特定用戶所有密鑰對(duì)的密鑰容器(container)。絕大多數(shù)的CSP通常為用戶提供兩組公鑰/私鑰對(duì)。一組密鑰對(duì)又叫密鑰交換對(duì),通常用于加密會(huì)話密鑰,這樣會(huì)話密鑰可以安全存放或與其它用戶交換。另一組又叫數(shù)字簽名密鑰對(duì),通常用于創(chuàng)建數(shù)字簽名。在用戶與服務(wù)提供商建立聯(lián)系之前,用戶必須有一個(gè)密鑰庫(kù),該密鑰庫(kù)存儲(chǔ)在注冊(cè)表的當(dāng)前用戶位置。操作系統(tǒng)成功安裝某種CSP并創(chuàng)建密鑰庫(kù)后,就可以與應(yīng)用程序取得連接。應(yīng)用程序通過(guò)CSP名稱調(diào)用CSP聯(lián)系指令。一旦連接成功,由操作系統(tǒng)將CSP裝入內(nèi)存,其密碼服務(wù)功能將成為操作系統(tǒng)核部分運(yùn)行。

3、信息密碼面向?qū)ο缶幊探涌谠O(shè)計(jì)與應(yīng)用
3.1 信息密碼面向?qū)ο缶幊探涌谠O(shè)計(jì)
  應(yīng)用面向?qū)ο蠓椒?,?duì)密碼編程接口功能進(jìn)行分析與封裝設(shè)計(jì),將有效提高編程速度。信息密碼功能主要包括:l)創(chuàng)建密鑰。該功能根據(jù)提供的密鑰算法產(chǎn)生私鑰體制下的會(huì)話密鑰或公鑰體制下的公共/私鑰對(duì)。2)交換密鑰。該功能包括交換公鑰和交換會(huì)話密鑰。交換公鑰不需要加密可直接輸出。交換會(huì)話密鑰時(shí)必須通過(guò)對(duì)方的公鑰進(jìn)行加密輸出。3)數(shù)據(jù)加密和數(shù)據(jù)解密。由于非對(duì)稱加密算法速度慢,信息密碼面向?qū)ο缶幊探涌谥械乃袛?shù)據(jù)加密都使用對(duì)稱算法。而公共/私人密鑰算法則用以較少位數(shù)的數(shù)據(jù)加密,如對(duì)會(huì)話密鑰或數(shù)字簽名進(jìn)行加密。數(shù)據(jù)解密利用會(huì)話密鑰對(duì)密文解密。4)數(shù)字簽名和簽名認(rèn)證。數(shù)字簽名可用來(lái)驗(yàn)證數(shù)據(jù)是否是真正由簽名方發(fā)送來(lái)的或數(shù)據(jù)在途中是否受到損壞。創(chuàng)建數(shù)字簽名的第一步是計(jì)算簽名數(shù)據(jù)的哈希值,然后用用戶的私鑰加密哈希值得到數(shù)字簽名。由于私鑰是秘密的,可以確保不知道密鑰的人無(wú)法偽造數(shù)字簽名。簽名認(rèn)證第一步用用戶的公共密鑰解密數(shù)字簽名并計(jì)算哈希值,將收到的哈希值與自己計(jì)算的哈希值相比較來(lái)驗(yàn)證數(shù)字簽名,由于只有真正的發(fā)送者才能創(chuàng)建匹配的哈希值,所以可以認(rèn)證發(fā)送者的身份。在信息密碼面向?qū)ο缶幊探涌趯?shí)現(xiàn)中,創(chuàng)建密碼類,將上述四種密碼功能作為該類的成員函數(shù)。密碼類既可作成基類與應(yīng)用程序一起進(jìn)行編譯,也可作為窗口類的派生類,將密碼類作成動(dòng)態(tài)庫(kù)由應(yīng)用程序調(diào)用。下面是采用第二種方法列出的密碼類C++語(yǔ)言描述:
  Class CCryptography::CWnd
  {
  public:
  CString strSourceFile,
  CString strDestFile,
  CString strDescription;
  public:
  CCryptography::CCryptgraphy(Cstring
  sourcefile, Cstring destfile);
  BOOL CreateKeyContainer( ); //創(chuàng)建密鑰庫(kù)
  BOOL EncryptFile( ); //密碼文件
  BOOL DecryptFile( ); //解密文件
  BOOL SignaturetFile( ); //創(chuàng)建數(shù)字簽名
  BOOL VerifyFile( ); //驗(yàn)證數(shù)字簽名
  }

3.2 密碼類在柔性加工單元信息安全中的應(yīng)用
  柔性加工單元是有多品種小批量生產(chǎn)特點(diǎn)的制造系統(tǒng)。單元通常按照客戶定單組織生產(chǎn)。單元網(wǎng)絡(luò)環(huán)境加快了單元與外界交互信息的速度,同時(shí)也帶來(lái)了網(wǎng)絡(luò)信息安全問題。柔性加工單元網(wǎng)絡(luò)信息安全包括:1)交互信息加密。加工單元通過(guò)網(wǎng)上發(fā)布服務(wù)信息和表單的方式與客戶取得聯(lián)系。雙方交互具有許多不希望第三方知道的敏感信息,如客戶方要求的定貨名稱、數(shù)量和單位等信息,加工單元回復(fù)的產(chǎn)品設(shè)計(jì)、成本報(bào)價(jià)等信息;2)合同數(shù)字簽名。加工單元與客戶雙方利用網(wǎng)絡(luò)簽定合同時(shí),傳統(tǒng)的手寫簽名或印簽方法是不適用的。這時(shí)需要借助數(shù)字簽名方法達(dá)到手寫簽名的不可否認(rèn)、無(wú)法偽造和可仲裁的目的。下面是應(yīng)用密碼類密碼應(yīng)用程序的部分C++代碼:
  文件加密
  {//定義密碼類對(duì)象,調(diào)用密碼類加密成員函數(shù)
  ...
  CCryptography* m_crypto;
  m_crypto=new
  CCryptography(Sourcefile, Destfile);
  m_crypto->EncryptFile( );
  ...
  }

4、全文總結(jié)
  應(yīng)用密碼類編寫密碼應(yīng)用程序明顯提高了編程效率,而且也適應(yīng)漸趨發(fā)展的面向?qū)ο缶幊谭较?。?yīng)用密碼類動(dòng)態(tài)庫(kù)連接方式使應(yīng)用程序與密碼編程接口進(jìn)一步分離,從而使增刪密碼類功能不十分影響應(yīng)用程序。應(yīng)用密碼類的密碼應(yīng)用程序的密碼速度雖比封裝前稍慢,但其效果還是令人滿意的。倘若密碼幾十兆字節(jié)的產(chǎn)品設(shè)計(jì)圖紙肯定存在速度太慢的問題,此時(shí)可考慮將圖紙分解密碼。當(dāng)然產(chǎn)品設(shè)計(jì)圖紙的網(wǎng)絡(luò)傳輸本身也存在速度太慢的問題。

(轉(zhuǎn)載)

標(biāo)簽:微軟 編程接口 運(yùn)用 我要反饋 
2024世界人工智能大會(huì)專題
即刻點(diǎn)擊并下載ABB資料,好禮贏不停~
優(yōu)傲機(jī)器人下載中心
西克
2024全景工博會(huì)
專題報(bào)道