專利名稱:用于對事務進行認證的系統(tǒng)和方法
技術領域:
本發(fā)明一般地涉及I2C總線上發(fā)生的通信的領域。
背景技術:
這些其它系統(tǒng)inter-IC總線(集成電路間總線),一般稱為IIC或I2C總線,是一種在系統(tǒng)中各個集成電路之間提供通信鏈路的控制總線。目前尚無保證I2C通信通道安全的標準方法,因此像所有的不安全系統(tǒng)一樣,采用I2C通信的系統(tǒng)容易受到攻擊和篡改。例如,一個稍微老練的攻擊者可以偷偷地打開諸如服務器之類的一臺采用I2C總線的機器,并在I2C總線上安裝一個常用的I2C寫工具。該I2C寫工具使得可以監(jiān)聽總線上的業(yè)務,在計算機安全領域這種監(jiān)聽通常被稱為窺探(snoop)。這將使得攻擊者可以確定總線上的資源是啟用的還是禁用的。經由掌握這些信息,攻擊者能夠對I2C總線上發(fā)生的合法事務進行復制(并且復制出的事務表現得如同合法事務本身一樣)。
這些其它系統(tǒng)I2C總線會如此容易受到攻擊的一個原因是,I2C總線是一種定義明確的開放總線,并且多個主控(master)可以合法地駐留在總線上并和平地共存。在現有技術的多主控環(huán)境中,每個主控都會意識到由其它主控發(fā)起的事務正在總線上發(fā)生,但它們不能確定這些其它事務是合法事務還是由入侵者發(fā)起的非法事務。在單主控環(huán)境中,可以將主控編制為檢測正在發(fā)生的任何其它事務(即不是由該單一主控發(fā)起的事務)并在假設這些事務是非法的情況下進行操作,然而,老練的攻擊者可以對該主控發(fā)起的業(yè)務進行修改并且這種修改可以不被檢測到。因此,攻擊者基本上能在I2C總線上透明地進行通信。這使得非法主控得以進入總線,與總線上的器件進行通信,并對這些器件上的數據進行修改和/或讀取而不會讓整個系統(tǒng)知道已經發(fā)生了這些事件。
這些其它系統(tǒng)因此,希望能夠對I2C總線上發(fā)生的通信進行認證,以確保這些通信是合法的。
發(fā)明內容
這些其它系統(tǒng)本發(fā)明能在無需修改現有I2C器件的情況下實現對標準I2C總線上發(fā)生的通信(事務)的認證。使用認證代理和共享密鑰來對總線上發(fā)生的讀寫事務進行認證。除了可以驗證事務的合法性外,對I2C事務的認證經由使得基板管理控制器(BMC)可以快速確定并指出錯誤而增強了總線以及總線上的器件的可靠性和適用性。
在優(yōu)選實施例中,B在MC和認證代理之間共享密鑰。BMC和認證代理分別對總線上傳送的數據執(zhí)行加密散列(hash),并且將由BMC創(chuàng)建的散列值與由認證代理針對同一事務數據創(chuàng)建的散列值相比較。匹配則表明此事務是合法無誤的,不匹配則表明此事務是非法或錯誤的。使用密鑰防止了攻擊者對總線上的事務進行偽認證。
附圖表明
圖1是說明本發(fā)明的基本體系結構的框圖;圖2說明了如何使用I2C復用器來實現將單一I2C總線分成多個I2C總線;圖3是一般地說明根據本發(fā)明在寫事務中所執(zhí)行的步驟的流程圖;并且圖4是一般地說明根據本發(fā)明在讀事務中所執(zhí)行的步驟的流程圖。
具體實施例方式
圖1是說明本發(fā)明的基本體系結構的框圖。參考圖1,例如BMC102之類的I2C主控經由I2C總線106連接到I2C器件104。這些單元構成了I2C系統(tǒng)的典型體系結構。雖然圖中只示出了一個單獨的I2C器件,但在同一個I2C總線上通??梢择v留多個I2C器件。
根據本發(fā)明,認證代理110連接到I2C總線106,從而使它與I2C總線106上正在通信的所有器件進行通信。從其最基本的形式上說,認證代理110包括密鑰寄存器112、解密引擎113、散列寄存器114和散列引擎116。認證代理110能夠與I2C總線上的所有器件進行通信,并且認證代理110本身是可尋址的,因此I2C總線上的其它器件能與它進行通信。
在圖1所示的實施例中,BMC102包括通用的CPU(未示出)和非易失性存儲器108,二者在同一BMC內,該通用的CPU例如帶有多個I/O通道的微型計算機,包括I2C控制器。在優(yōu)選實施例中,CPU應當能夠實現共享密鑰的加密散列算法(例如,對共享系統(tǒng)來說,對加密散列所進行的處理是使用對稱密碼、使用所存儲的密鑰來對該散列進行加密;對公鑰系統(tǒng)來說,對加密散列所進行的處理是使用公鑰密碼、使用所存儲的密鑰來對該散列進行加密),或者BMC應當包含專用硬件(例如,專門用來處理散列和加密的邏輯)來執(zhí)行這些任務。加密散列技術在本技術領域內是公知的,并且任意已知的散列技術和/或體系結構都可以用于本發(fā)明中。錯誤信號總線118連接BMC102和認證代理110,目的是使認證代理110進行信令錯誤檢測。
認證代理110駐留在I2C總線106上,并且檢測并監(jiān)聽總線上發(fā)生的所有I2C事務。結合本發(fā)明而利用了I2C協(xié)議的一個特征,稱為重復發(fā)起條件。重復發(fā)起條件使得例如BMC102之類的總線主控可以不斷地發(fā)起新的事務而不用重復判斷對總線的控制。因此,總線的主控可以在維持對總線的控制的同時,用同樣的數據以所期望的次數多次發(fā)出新的事務。
使用標準的發(fā)起條件,I2C主控在I2C總線上發(fā)起與I2C器件的事務,在到此特定I2C器件的事務的結尾,并不產生終止事務的停止條件,而是由I2C主控發(fā)起重復的發(fā)起條件,并且,不是利用重復傳輸來對目標器件進行尋址,而是由I2C主控發(fā)起對駐留在發(fā)生事務的I2C總線上的認證代理的寫事務。經由使用重復發(fā)起條件,并沒有得到兩個獨立的總線事務,而是發(fā)生了單一的連續(xù)重復事務。重復發(fā)起事務被用于在多主控環(huán)境下確保數據和散列值的正確分組。如果不使用重復發(fā)起事務,競爭主控有可能會在散列寫入階段期間贏得I2C判斷,從而破壞驗證過程。
重復發(fā)起事務的使用不排除實用重復發(fā)起事務來訪問I2C器件(諸如I2C NVRAM(非易失性隨機存取存儲器))。如果認證代理不是重復發(fā)起事務之后的事務的目標,則該認證代理將繼續(xù)窺探總線并使用附加的地址和數據來繼續(xù)計算散列。認證代理應當將混合了讀寫的重復發(fā)起事務與只進行讀或寫的事務同等對待。本發(fā)明的BMC配置為能夠正確地對這些重復發(fā)起的讀/寫事務計算散列。
由于認證代理窺探了總線上發(fā)生的所有事務(例如,它收到與從主控傳送給I2C器件的數據相同的數據),因此該認證代理使用散列引擎116基于相同的信息創(chuàng)建散列值。假設傳輸是合法的,由于BMC是創(chuàng)建的所有這些信息的器件,因此它能夠基于這些信息創(chuàng)建散列。然后BMC使用密鑰對散列進行加密,并將加密后的散列傳送到認證代理。然后認證代理用解密引擎113對散列進行解密,并且散列寄存器配置為使用已知的比較方法對兩個散列值進行比較(即將由認證代理創(chuàng)建的散列值與接收自BMC的散列值相比較),該方法例如雙輸入的邏輯門,當兩個輸入相同時輸出第一數字值,并且當兩個輸入不同時輸出第二數字值。如果認證代理計算出的散列值與BMC計算出的散列值不同,則表明非法器件發(fā)起了該傳輸或者傳輸中存在錯誤。在任一情況下,這都是應了解的有價值的信息。然后認證代理經由錯誤通道118用信號通報錯誤。然后BMC就能采取適當的措施,即重新發(fā)送傳輸或確定何處出現了安全漏洞。如果總線上發(fā)生了讀或寫事務(并且因此監(jiān)聽該總線的認證代理窺探到該事務)并且認證代理沒有收到BMC針對該事務而計算的散列值,那么該認證代理也會經由錯誤通道118用信號向BMC通報發(fā)生了錯誤。
認證代理和BMC應當只使用包含在所傳送的字節(jié)中的信息來計算散列。START(開始)、STOP(停止)和ACK/NACK(確認/否定確認)比特都不應當用來計算散列。此外,認證代理不應當在其散列計算中包括散列傳輸事務。
BMC和認證代理使用相同的散列算法。BMC和認證代理可以交替地采用公鑰加密法或任意其它的已知加密技術來對散列進行加密和解密。為了使用公鑰方法,BMC可以創(chuàng)建公鑰-私鑰對??梢詫⒐€傳送給認證代理中的密鑰寄存器,并由BMC保存私鑰。在BMC計算出事務的散列后,該BMC使用其私鑰來對散列進行加密。然后認證代理使用BMC的公鑰來對散列進行解密。
上述實施例提供了一種使得可以對I2C總線上發(fā)生的事務進行認證的系統(tǒng),這是對現有技術的系統(tǒng)的重大改進。然而,老練的攻擊者仍能經由試圖避開認證代理110提供的篡改檢測信號來切斷認證代理110與I2C總線106的連接。根據本發(fā)明的優(yōu)選實施例,可以附加地為圖1的系統(tǒng)配備連接在I2C總線106與認證代理110之間的看門狗(watchdog)定時器120(定時器120用虛線示出,以表明它是可選的)。定時器120配置為在認證代理110在一段預定的時間幀內未收到I2C事務的情況下使得該在認證代理110經由錯誤通道118向BMC102表明錯誤。例如,如果定時器檢測到大于單一有效事務長度的長度的暫停,系統(tǒng)就可以配置為表明出現了問題。
老練的攻擊者還能夠切斷或欺騙BMC102與認證代理110之間的錯誤通道118。為了對付這一類攻擊,在優(yōu)選實施例中,BMC102配置為周期地性地尋址并且向認證代理110傳送隨機數據。認證代理110配置為接收這些隨機數據而不對其執(zhí)行任何措施。然后BMC102會以正常的方式對散列進行計算和加密并將其傳送給認證代理,但BMC102周期性地在傳送前故意破壞散列值。認證代理110將照常對可能已被破壞的散列值進行解密并對其進行比較,并且而適當的時候用信號在錯誤通道118上通報錯誤。由于BMC102知道它所創(chuàng)建的散列值是正確的還是錯誤的,因此,它將會預料到錯誤通道118上的適當的錯誤響應。由于在這種攻擊場景中,認證代理110與BMC102之間的錯誤通道118已經被切斷或欺騙,因此BMC不會收到這種錯誤信號或者BMC會收到不正確的錯誤信號,并且BMC都假設發(fā)生了錯誤并采取正確的措施。
圖2說明了如何使用I2C復用器203來實現將單一I2C總線分成多個I2C總線。在這種配置中,多個認證代理210A、210B、...、210n連接到I2C總線,每個認證代理對應于一條從I2C復用器203分出的I2C總線206A、206B、...、206n。每個認證代理都必須具有一條建立在該認證代理與BMC之間的通信路徑(218A、218B、...、218n),以便能夠傳送錯誤信息。而且,每個認證代理都必須得到其關聯(lián)I2C總線的輸出(tap off),以便使它可以窺探該I2C總線并接收散列數據。從I2C復用器203分出的各路I2C總線206A、206B、...、206n的操作與以上針對圖1所述的操作基本相同。盡管圖2并未示出圖1所示的計時器,但如果需要的話也可以針對每個認證代理而包括該計時器。
圖3是一般地說明根據本發(fā)明在寫事務中所執(zhí)行的步驟的流程圖。處理開始,并且在步驟302中,I2C主控使用其密鑰(對于HMAC(散列消息認證碼)認證)、目標I2C器件的地址以及待發(fā)送給目標I2C器件的數據來計算散列值。然后,I2C主控使用它的密鑰對散列進行加密。在步驟304中,I2C主控發(fā)起與目標I2C器件的寫事務。
在步驟306中,認證代理窺探事務并使用其密鑰和事務信息(地址和數據)來計算散列值。在步驟308中,I2C主控在I2C總線上發(fā)出發(fā)往認證代理的重復發(fā)起事務,并寫入在步驟302中創(chuàng)建的由I2C主控計算的散列值。如果I2C主控在尋址并與認證代理進行通信時(步驟309)收到否定確認碼(NAK),則該I2C主控將前進到步驟314以便進行錯誤確定。如果沒有收到否定確認,則在步驟310中,認證代理用它的密鑰對I2C主控的散列值進行解密并與它創(chuàng)建的散列值相比較。
在步驟312中,如果確定散列值不匹配或者如果在以STOP(停止)命令終止事務之前認證代理沒有收到散列,則處理前進到步驟314,在這里事務被認定出了問題并發(fā)起調查。如果調查表明存在簡單的錯誤,則可以重新發(fā)送該事務。如果調查表明了可能的安全漏洞,則可以采取措施彌補漏洞。簡單的錯誤可以由BMC在完成整個事務并經由錯誤通道收到錯誤后指出。安全漏洞則可以由BMC在不需要其已經發(fā)出相關聯(lián)的事務的情況下經由錯誤通道收到錯誤后指出。然后處理直接前進到步驟318,如下所述。
如果在步驟312中確定散列值確實匹配,則在步驟316中事務通過認證并且不需要任何補救措施。然后處理前進到步驟318中,在這里判斷總線上是否發(fā)起了附加的事務。如果有,處理返回到步驟302中;如果沒有,則處理結束。
圖4是一般地說明根據本發(fā)明在讀事務中所執(zhí)行的步驟的流程圖。處理開始,并且在步驟402中,I2C主控對目標I2C器件進行尋址并執(zhí)行對來自目標I2C器件的數據的讀取。在步驟404中,認證代理窺探讀事務并使用其密鑰(或者如果使用“散列+加密”的認證,則認證代理可以執(zhí)行散列操作)和窺探到的信息來計算散列值。在步驟406中,I2C主控用它的密鑰、從中讀取數據的I2C器件的地址以及從中讀取的數據來計算其散列。然后I2C主控用其密鑰對散列進行加密。在步驟408中,I2C主控在I2C總線上發(fā)出發(fā)往認證代理的重復發(fā)起事務,并寫入由I2C主控計算的散列。如果I2C主控在尋址并與認證代理進行通信時(步驟409)收到否定確認(NAK),該I2C主控將前進到步驟414中以便進行錯誤確定。
如果在步驟409中I2C主控沒有收到否定確認,則在步驟410中認證代理對I2C主控的散列進行解密并將結果與它所計算出的散列值相比較。在步驟412中,如果確定散列值不匹配或者如果在以STOP(停止)命令終止事務之前認證代理沒有收到散列,則得出事務存在問題的結論并發(fā)起對該問題的調查(步驟414)。如果在步驟412中確定存在匹配,則事務通過認證(步驟416)。
在步驟418中,確定是否有另外的事務要傳送。如果有另外的事務要傳送,則處理返回到步驟402。如果沒有另外的事務要傳送,則處理結束。
在優(yōu)選實施例中,本發(fā)明的認證代理可以包括微控制器,該微控制器包含共享密鑰解密引擎、加密散列引擎、散列寄存器和一次寫入非易失性密鑰寄存器。如果需要的話,可以用CPLD(復雜可編程邏輯器件)、ASIC(專用集成電路)或者FPGA(現場可編程門陣列)來代替微控制器。一次寫入寄存器用作用于解密引擎的密鑰,并且該一次寫入寄存器不是可讀的??蛇x地,器件可以實現會清除密鑰寄存器中的內容的清除引腳(clear pin)或寄存器比特。散列引擎使用共享密鑰(對于HMAC認證)和來自I2C總線的數據來生成散列值。將該散列值存儲在散列寄存器中。如果如圖2所示,I2C復用器位于BMC與I2C受控器件(slave)之間,則認證代理必須駐留在同一個I2C總線上作為待保護的器件。這將以防止未經授權的事務到達受控器件。
優(yōu)選地,加密散列算法應當使用密鑰來保證不能被輕易地通過僅僅檢查I2C數據來重新創(chuàng)建散列輸出,即HMAC認證。
在操作之前,應當執(zhí)行初始化處理以使系統(tǒng)開始操作。由于BMC將在I2C總線上以密碼的方式傳送密鑰,因此應當在物理上安全的環(huán)境中對系統(tǒng)進行初始化。在示例性的初始化處理中,BMC首先收到對認證代理進行初始化的命令。在該命令中包括用于所有通信的共享密鑰。BMC在非易失性存儲器中存儲該密鑰。然后BMC前進到將該密鑰寫入所有已連接的認證代理的一次寫入寄存器。然后BMC通過對每個總線上的I2C器件執(zhí)行至少一個已認證的事務來核實是否已經正確地寫入了所有的認證代理密鑰(如以上針對圖3和圖4所述)。如果在認證期間檢測到錯誤,則清除并重新編制認證代理的密鑰。在已經驗證了所有的認證代理之后,系統(tǒng)就準備好進行正常的操作了。
作為備選,BMC的代碼和認證代理可以在設計時就將密鑰嵌入進去。這就可以免去初始化的過程。然而,必須使用任一已知方式特別小心地確保不能從代碼更新中恢復密鑰。
上述步驟可以用硬件來實現和/或使用標準的公知編程技術來實現。上述實施例的新穎性并不在于特別的編程技術,而是在于使用所描述的步驟來獲得所描述的結果。具體實現本發(fā)明的軟件編程代碼通??梢源鎯υ谥T如BMC的永久性存儲器之類的某些類型的永久性存儲器中。在客戶機/服務器環(huán)境中,可以利用與服務器相關聯(lián)的存儲器來存儲這種軟件編程代碼。軟件編程代碼可以包含在用于結合數據處理系統(tǒng)而使用的各種已知的介質中的任意介質上,該介質諸如磁盤、硬盤驅動器或CD-ROM(壓縮光盤-只讀存儲器)。代碼可以在這些介質發(fā)布,或者以如下方式發(fā)布給用戶,即,通過某種網絡從一個計算機系統(tǒng)的內存或存儲器發(fā)送到其它計算機系統(tǒng),以由這些其它系統(tǒng)的用戶所使用。將軟件程序代碼包含在物理介質和/或經由網絡對軟件代碼進行分布的技術和方法都是公知的,并且在這里將不作進一步的討論。
可以理解,附圖中的每個單元以及附圖中的單元的組合都可以由執(zhí)行指定功能或步驟的通用的和/或專用的的基于硬件的系統(tǒng)來實現,或者由通用的和/或專用的硬件與計算機指令的組合來實現。
可以將這些程序指令提供給處理器以制造某種機器,使得在處理器上執(zhí)行的指令生成用于實現附圖中所指定的功能的裝置。處理器可以執(zhí)行計算機程序指令以產生一系列操作步驟,這些操作步驟由處理器來執(zhí)行以產生由計算機實現的處理,使得在處理器上執(zhí)行的指令提供用于實現附圖中所指定的功能的步驟。因此,附圖支持用于執(zhí)行指定功能的裝置的組合,用于執(zhí)行指定功能的步驟的組合,以及用于執(zhí)行指定功能的的程序指令裝置。
雖然針對本發(fā)明的特定優(yōu)選實施例對本發(fā)明進行了描述,但本領域的普通技術人員可以提出各種改變和修改,并且本發(fā)明應當涵蓋處于所附權利要求書的范圍內的這些改變和修改。
權利要求
1.一種用于對至少一個I2C總線上I2C主控與一個或多個I2C器件之間的事務進行認證的系統(tǒng),包括認證代理,其連接到第一I2C總線,所述認證代理配置為監(jiān)聽所述第一I2C總線上發(fā)生的所有事務,識別非法事務,并將所述非法事務的標識經由信號發(fā)給所述I2C主控。
2.根據權利要求1所述的系統(tǒng),其中所述認證代理包括散列引擎,其連接到所述第一I2C總線,所述散列引擎對所述第一I2C總線上發(fā)生的每個事務執(zhí)行加密散列,以針對每個事務創(chuàng)建認證散列值;以及散列寄存器,其連接到所述第一I2C總線和所述散列引擎,所述散列寄存器將每個所述認證散列值與由所述I2C主控針對所述第一I2C總線上的它所發(fā)起的每個事務創(chuàng)建的驗證散列值相比較,其中所述比較的結果被所述認證代理用來確定所述認證代理所監(jiān)聽的所述事務中的一個特定事務是合法事務還是非法事務。
3.根據權利要求2所述的系統(tǒng),其中所述認證代理進一步包括密鑰寄存器,其連接到所述第一I2C總線并存儲接收自所述BMC的加密密鑰;以及解密引擎,其連接到所述密鑰寄存器并連接到所述散列寄存器,所述解密引擎使用存儲在所述密鑰寄存器內的所述加密密鑰來對接收自所述第一I2C總線的每個事務進行解密。
4.根據權利要求3所述的系統(tǒng),進一步包括定時器,其連接到所述認證代理和所述第一I2C總線,所述定時器配置為當在預定的時間內所述第一I2C總線上無事務發(fā)生時向所述認證代理發(fā)送超時信號,其中所述認證代理配置為在從所述定時器收到所述超時信號后向所述BMC發(fā)送超時事件信號。
5.根據權利要求4所述的系統(tǒng),進一步包括I2C復用器,其連接在所述BMC與所述I2C總線之間,其中每個所述I2C總線都有專用的認證代理與之相連。
6.一種計算機程序產品,其用于至少一個I2C總線上的基板管理控制器(BMC)以及一個或多個I2C器件,所述計算機程序產品包括計算機可讀存儲介質,所述計算機可讀存儲介質具有包含在所述介質中的計算機可讀程序代碼,所述計算機可讀程序代碼包括配置為監(jiān)聽所述第一I2C總線上發(fā)生的所有事務,識別非法事務,并將所述非法事務的標識經由信號發(fā)給所述BMC的計算機可讀程序代碼。
7.一種用于對至少一個I2C總線上基板管理控制器(BMC)與一個或多個I2C器件之間的事務進行認證的方法,包括用于監(jiān)聽所述第一I2C總線上發(fā)生的所有事務的步驟;用于識別非法事務的步驟;以及用于將所述非法事務的標識用信號發(fā)給所述BMC的步驟。
8.根據權利要求7所述的方法,進一步包括用于對所述第一I2C總線上發(fā)生的每個事務執(zhí)行加密散列,以針對每個事務創(chuàng)建認證散列值的步驟;以及用于對將每個所述認證散列值與由所述BMC針對所述第一I2C總線上它所發(fā)起的每個事務創(chuàng)建的驗證散列值相比較的步驟,其中所述比較的結果被用來確定所述被監(jiān)聽的事務中的一個特定事務是合法事務還是非法事務。
9.根據權利要求8所述的方法,進一步包括用于在密鑰寄存器中存儲接收自所述BMC的加密密鑰的步驟;以及用于使用存儲在所述密鑰寄存器中的所述加密密鑰來對接收自所述第一I2C總線的每個事務進行解密的步驟。
10.根據權利要求9所述的方法,進一步包括用于當在預定的時間內所述第一I2C總線上無事務發(fā)生時發(fā)出超時信號的步驟;以及用于在發(fā)出所述超時信號后向所述BMC發(fā)送超時事件信號的步驟。
全文摘要
本發(fā)明能在無需修改現有I
文檔編號H04L12/40GK1988438SQ20061013934
公開日2007年6月27日 申請日期2006年9月26日 優(yōu)先權日2005年12月20日
發(fā)明者賈斯廷·波特克·班德霍爾茲, 拉爾卡·M·貝岡, 安德魯·S·海因茨曼, 費爾南多·A·洛佩斯 申請人:國際商業(yè)機器公司