2022年2月20日 星期日

HSM, TPM, SHE, TEE, Trustzone

Source https://blog.csdn.net/DreamBitByBit/article/details/80231897

TrustZone是什麼


 基本的安全方式有加密和完整性保護等,加密通過密碼口令或是秘鑰方式,鑑權用來檢查資源是否可用,如果資源遭遇破壞則會導致鑑權失敗。由於存在多種攻擊方式,軟件方式包括軟件病毒、惡意軟件等,而硬件方式可以通過JTAG引腳、I/O引腳檢測、電流電壓檢測、顯微鏡查看電路等進行攻擊,所以需要從硬件軟件層面設計有效系統來對抗攻擊。TrustZone是ARM為了防止設備有效資源被拷貝、破壞或篡改,防止被惡意攻擊,對資產包括有形和無形資產進行,以防止惡意軟件、硬件監視、硬件干預等方式破壞或獲取設備信息。Trustzone從處理器、總線、外設等系統層面進行保護,同時考慮減少額外的資源開銷。注意時間、開銷允許的情況下,不可能阻止所有可能的攻擊,只是在一定的時間和資源(錢)的限制內,能夠保證不會受到相應的攻擊。TrustZone 將軟件硬件部分分為安全世界和正常世界,正常世界器件不可訪問安全世界區域器件、存儲空間等。TrustZone可以作為實現TPM功能的HSM (hardware Secure module) 模塊來使用。對於外設的權限控制TrustZone通過AXI-APB橋來實現,以此兼容外設需求。


 ARMv8的特徵


 ARMv8中包含了trustZone功能,同時提供了SHA、AES等一些加密加速器處理(? 沒有註意到TRNG 真隨機數處理的相關模塊)。另外相對於v7,v8中還提供了64位數據的指令處理,同時增加了SIMD ( Single Instruction Multi Data) 的指令處理。所以在v8中有AArch64和AArch32的處理模式,在AArch64模式下支持128比特的SIMD,在AArch32模式下支持64比特的SIMD處理模式,同時v8有三種配置模式,A Application配置,指示虛擬地址系統VMSA(Virtual Memory System Architecture)及MMU,支持A64、A32、T32指令集;R Real-time配置,支持MPU,支持PMSA(Protected Memory System Architecture),支持A32和T32指令集;M 微控製配置。支持PMSA,低延時中斷處理,支持T32變種指令集。三種模式對能力和功耗做了權衡,可適應不同的使用場景。v8 AArch64重新定義了四種等級EL0-EL3模式,其中EL0為最低模式,EL0 用戶應用模式;EL1 系統相關功能特權模式;EL2 為Hypervisor 虛擬功能模式;EL3 Monitor用於切換Secure和Non-Secure兩種模式。對應32模式增加了Hypervisor和Monitor 兩種模式分隊對應EL2和EL3模式,用戶模式為EL0,其他FIQ、IRQ、system等模式對應EL1。為了實現Secure world和Non-Secure world的分離,增加了NS比特位的處理,例如CP15 SCR( Secure Configuration Register ) NS的配置。


 TrustZone的結構


 整體結構: 兩個虛擬world使用同一個物理處理器實現,亦即一個實體核有兩虛擬核模式,非安全核只能訪問非可信系統資源,而安全核可以訪問所有資源。兩種模式不可共存,時分複用,通過Monitor mode(軟件實現兩種模式的信息切換)切換。進入monitor通過軟件指令Secure Monitor Call (SMC) instructio或硬件機制( FRQ、FIQ、external Data Abort and Prefetch Abort ) 。



 軟件調度實現



 在實現兩個不同安全模式切換時,採用Monitor進行兩個世界的上下文切換,而對於兩個模式的配合可以使用多種不同的方式。安全世界可以擁有自己的操作系統,獨立於非安全世界;同樣安全功能也可以作為正常模式調用的子模式,或是採用兩種極端模式的折中方式。


 安全啟動與可信鏈


 常見到secure boot、trusted boot、meased boot等,方式有些類似,都是採用簽名加密等方式來保證啟動及軟件的完整和安全性,當然處理方式細節及概念細節上也存在些許差別,例如關於安全啟動和可信引導secure boot、trusted boot,前者保證boot程序正確,後者引導的程序未被修改,採用數字簽名技術。可信根( 需要NVRAM或OTP One-Time-Progrm方式存儲) 需要從硬件初始化開始保證每個模塊代碼的載入都是可靠可信的,可信鏈即表達了按照鍊式方式保證每個步驟都是可靠的。



 TrustZone典型啟動過程



 硬件安全的一些理解


 通過頻率、電源供電等檢測、電路、時鐘、時序、端口等硬件方式可以得到硬件的具體執行內容,例如正常乘法和加法消耗時間可能就不相同。為了避免這些硬件攻擊方式,硬件可以在物理特性上保證消除不同處理的特徵差異,如統一執行週期,加入指令噪聲,插入特殊或空指令等;而防止ROM / FLASH等內容被讀出進行反彙編,則可以採用加密接口的ROM、FLASH等;防止總線數據被讀取,可以進行極性反轉等操作;同樣檢測數據是否被修改,可以進行奇偶校驗等處理。當然這些處理將帶來更多的資源,更多的功耗,所以需要必要的進行權衡取捨,簡化無效處理。

————————————————

版权声明:本文为CSDN博主「究理观心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/DreamBitByBit/article/details/80231897


Source  https://www.csdn.net/tags/MtTaIg4sNzIwODQzLWJsb2cO0O0O.html

安全加密 - HSM vs Trustzone vs SHE vs Evita ,

千次阅读2020-12-06 22:21:44

基于SAEJ3061,制定了ISO 21434。

基于SHE,扩展了HSM (在EVITA项目中提出)

 

https://www.cnblogs.com/byronsh/p/automotive-cybersecurity-standard-specification.html

 

HSM: 

TrustZone是HSM模块一种。

TrustZone实现TPM功能。

Hsm包含SHE,SHE是针对汽车领域的密钥存储,硬件加解密算法的芯片模块,SHE又分三类

 

SHE: Secure Hardware Extension

TPM:Trusted Platform Module

HSM:hardware Secure module

SHE: 是HIS制定的标准,“安全硬件扩展”。旨在将秘钥的控制从软件领域移到硬件领域。如TPM芯片等。

 

TPM:通常是硬件chip,用于单机授权验证。
HSM:除chip 外,还有支撑的软件,可以扩展为网络上存取验证。

 

 

2022年1月26日 星期三

C-V2X notebook

For MDM9150

     PC5 does not need SIM for calibration

     UU needs SIM for calibration

2021年11月5日 星期五

RF Q&A

 Q1. "Filter in front of LNA" vs "LNA in front of filter"

A1. "LNA in front of filter" (w/ proper frequency response) provides better RF performance.


Q2. PA linearity index?


Q3. Spectrum Analyzer : Resolution BW vs Video BW

A3. Resolution BW : frequency axis grid

    Video BW : displayed spectrum is low-pass filtered.


Q4. Btwn TDD and FDD, which requires higher quality power supply? why?

    (same Fc, BW, 64QAM and peak power)

A4. FDD. Higher power supply helps inter band seperation.

2021年9月15日 星期三

BPDU - When Windows Ethernet and WiFi are configured in "Bridge" mode.

Source https://www.itsfun.com.tw/BPDU/wiki-8372865-1834445

BPDU

BPDU是運行STP的交換機之間交換的訊息幀。BPDU內包含了STP所需的路徑和優先權信息,STP便利用這些信息來確定根橋以及到根橋的路徑。

  • 中文名稱
    BPDU
  • 版本號
    STP的版本(為IEEE 802.1d時值為0
  • 協定ID
    該值總為0。
  • 報文類型
    BPDU類型

概念

網橋協定資料單元(Bridge Protocol Data Unit)。是一種生成樹協定問候封包,它以可配置的間隔發出,用來在網路的網橋間進行信息交換。

當一個網橋開始變為活動時,它的每個連線埠都是每2s(使用缺省定時值時)傳送一個BPDU。然而,如果一個連線埠收到另外一個網橋傳送過來的BPDU,而這個BPDU比它正在傳送的BPDU更優,則在地連線埠會停止傳送BPDU。如果在一段時間(缺省為20s)後它不再接收到鄰居的更優的BPDU,則在地連線埠會再次傳送BPDU。

BPDU是網橋協定資料單元(Bridge Protocol Data Unit)的英文首字母縮寫。

BPDU報文主要欄位

協定ID:該值總為0。

版本號:STP的版本(為IEEE 802.1d時值為0)。

報文類型:BPDU類型(配置BPDU=0,TCN BPDU=80)。

標記域:LSB(最低有效位)=TCN標志;MSB(最高有效位)=TCA標志。

根網橋ID:根信息由2位元組優先權和6位元組ID組成。這個信息組合標明已經被選定為根網橋的設備標識。

根路徑成本:路徑成本為到達根網橋交換機的STP開銷。表明這個BPDU從根網橋傳輸了多遠,成本是多少。這個欄位的值用來決定哪些連線埠將進行轉發,哪些連線埠將被阻斷。

傳送網路橋ID:傳送該BPDU的網橋信息。由網橋的優先權和網橋ID組成。

連線埠ID:傳送該BPDU的網橋連線埠ID。

計時器:計時器用于說明生成樹用多長時間完成它的每項功能。這些功能包括報文老化時間、最大老化時間、訪問時間和轉發延遲。

最大老化時間:根網橋傳送BPDU後的秒數,每經過一個網橋都會增加1,所以它的本質是到達根網橋的跳計數。

訪問時間:根網橋連續傳送BPDU的時間間隔。

轉發延遲:網橋在監聽學習狀態所停留的時間。

網橋的三種典型方式

BPDU究竟是如何工作的呢?

這得從網橋說起。網橋有三種典型的方式:透明橋、源路由橋與源路由透明橋。

網橋典型地連線兩個用同樣介質存取控製方法的網段,IEEE 802.1d規範(此規範是為所有的802介質存取方法開發的)定義了透明橋。源路由橋是由IBM公司為它的令牌環網路開發的;而源路由透明橋則是透明橋和源路由橋的組合。橋兩邊的網段分屬于不同的沖突域,但卻屬于同一個廣播域

路徑連線原理

在一個橋接的區域網路裏,為了增強可靠性,必然要建立一個冗餘的路徑,網段會用冗餘的網橋連線。但是,在一個透明橋橋接的網路裏,存在冗餘的路徑就能建立一個橋回路,橋回路對于一個區域網路是致命的。

生成樹協定是一種橋嵌套協定,在IEEE 802.1d規範裏定義,可以用來消除橋回路。它的工作原理是這樣的:生成樹協定定義了一個封包,叫做橋協定資料單元BPDU(Bridge Protocol Data Unit)。網橋用BPDU來相互通信,並用BPDU的相關機能來動態選擇根橋和備份橋。但是因為從中心橋到任何網段隻有一個路徑存在,所以橋回路被消除。

在一個生成樹環境裏,橋不會立即開始轉發功能,它們必須首先選擇一個橋為根橋,然後建立一個指定路徑。在一個網路裏邊擁有最低橋ID的將變成一個根橋,全部的生成樹網路裏面隻有一個根橋。根橋的主要職責是定期傳送配置信息,然後這種配置信息將會被所有的指定橋傳送。這在生成樹網路裏面是一種機製,一旦網路結構發生變化,網路狀態將會重新配置。

當選定根橋之後,在轉發封包之前,它們必須決定每一個網段的指定橋,運用生成樹的這種演算法,根橋每隔2秒鍾從它所有的連線埠傳送BPDU包,BPDU包被所有的橋從它們的根連線埠復製過來,根連線埠是接根橋的那些橋連線埠。BPDU包括的信息叫做連線埠的COST,網路管理員分配連線埠的COST到所有的橋連線埠,當根橋傳送BPDU的時候,根橋設定它的連線埠值為零。然後沿著這條路徑,下一個橋增加它的配置連線埠COST為一個值,這個值是它接收和轉發封包到下一個網段的值。這樣每一個橋都增加它的連線埠的COST值為它所接收的BPDU的包的COST值,所有的橋都檢測它們的連線埠的COST值,擁有最低連線埠的COST值的橋就變為了指定的橋。擁有比較高連線埠COST值的橋置它的連線埠進入阻塞狀態,變為了備份橋。在阻塞狀態,一個橋停止了轉發,但是它會繼續接收和處理BPDU封包


Source http://smalleaf.blogspot.com/2011/10/switch-bpdu-guard.html

防止私接Switch的利器 - BPDU GUARD

今天客戶問我一個問題:

為什麼設定了Spanning-tree portfast還有spanning-tree bpduguard enable那個port不能接switch!?

回答這個問題之前,有三個名詞要先了解:
1.spanning-tree: 中文好像翻成生成樹,管它什麼翻譯,這個東西是Switch上的設定,設定上去後,Switch與Switch之間會相互溝通,避免網路迴圈(loop)狀況產生,缺點是剛接上switch的設備會需要30~50秒的時間…溝通…之後網路才會通。

2.portfast: 這是spanning-tree的進階設定,目的就是當確定網路port所連接的設備確定是終端設備,如印表機、PC、Server等時,不需要switch之間的spanning-tree那30~50秒的溝通,可以利用portfast跳過這個溝通時間。

3.BPDU:全面為bridge protocol data unit,為switch之間spanning-tree溝通的協定資料,只要有spanning-tree的環境就會有BPDU存在。

了解這三個名詞之後,再來看spanning-tree的進階設定"BPDUGUARD",我們知道bpdu是switch之間溝通spanning-tree的協定資料,那來防止bpdu的bpduguard就是防止switch之間溝通spanning-tree的保彪,問題是…為什麼要禁止spanning-tree呀??這不是防止loop發生的好機制嗎??

原因是spanning-tree是cisco switch預設的功能,只要開機就有啦!!所以只要把一台switch接到另一個swich就會發生spanning-tree的溝通。這時....BPDU GUARD的功就用產生了,可以用來避免人把swich接到自已的網路環境,因為只要一接上就會有bpdu協定資料出現,這時bpdu guard就會將該port error disable,來避免有人私接swich進網路環境。

聰明的您應該有發現,這有個前提,整個bpdu guard的保護只能保護會發送bpdu的switch,如果對方把spanning-tree關掉,或是非cisco swich,這個安全機制就破功啦@@

雖然如此,這還是一個很好的功能,比如說某天自已忘了,接了一台swich上去,更動了原本的STP架構,這不就糗了!!透過BPDU GUARD就是在避免STP被更動的危險狀況!!

最後…回到原將問題:
為什麼設定了Spanning-tree portfast還有spanning-tree bpduguard enable那個port不能接switch!?


因為spanning-tree bpduguard enable之後,會開啟spanning-tree的bpdu防護機制,避免swich之間有spanning-tree的溝通資料(bpdu),或者說,避免有人私接switch進來,因為當對方一接進來,該port會偵測到bpdu資料,此時已啟用bpdu guard的switch會自動將該port Error Disable。所以更正確一點的說法是,不能接會發送bpdu的switch進來,如果非cisco swich或是已關掉spanning-tree的swich還是可以接進來的。


Source https://a46087.pixnet.net/blog/post/32217254

======================================================================

網孔底

Hub

NB / Win10 /

WiFi/Ethernet network bridge by following https://superuser.com/questions/1319833/use-wifi-and-ethernet-simultaneously-on-windows-10

PC / Linux / Ethernet


WNC MIS : 網孔底下的設備串到loop or 私接的switch被偵測到導致網孔被鎖住。WNC MIS : 網孔偵測到BPDU這種封包就會被鎖住

2021年9月6日 星期一

Communication btwn Linux User Space and Kernel Space.

 Source https://stackoverflow.com/questions/942273/what-is-the-ideal-fastest-way-to-communicate-between-kernel-and-user-space


  • mmap

  • named pipe
  • system calls

  • ioctls

  • /proc & /sys 

  • netlink

Reentrant vs Thread-safe

Source https://magicjackting.pixnet.net/blog/post/113860339

Reentrant vs Thread-safe



Reentrancy 和 thread-safty 是兩個容易被搞混了的觀念. 其中最嚴重的是誤以為 reentrant function 必定是 thread-safe 或者相反以為 thread-safe function 必為 reentrant, stackoverflow 網站上的答覆甚至同時出現二種答案的現象.

Reentrancy 和 Thread-safty 二者的差異


首先來看 reentrancy: 字面上的意思是可重入. Reentrancy 原先是討論單一執行緒環境下 (即沒有使用多工作業系統時) 的主程式和中斷服務程式 (ISR) 之間共用函數的問題. 當然現在多核心的 CPU 盛行, 討論範圍也必需擴充至多執行緒的情況. 重點是它討論的主體是: 在 ISR 中使用的函數 (不論是自己寫的或者是函數庫提供的) 是否會引發錯誤結果. 主要的達成條件是二者 (ISR 和非 ISR) 的共用函數中不使用靜態變數或全域變數 (意即只用區域變數). 一般是撰寫驅動程式 (device driver) 或者是寫 embedded system 的人會遇到這個問題.

再來是 thread-safety: 字面上的意思是執行緒 (線程) 安全. Thread-safe 一開始就針對多執行緒的環境 (CPU 可能單核也可能是多核), 討論的是某一段程式碼在多執行緒環境中如何保持資料的一致性 (及完整性), 使不致於因為執行緒的切換而產生不一致 (及不完整) 或錯誤的結果. 所以是程式中有運用到多執行緒的大型應用系統的程式人員會比較常遇到這類問題. 問題的產生點一般出現在對某一共用變數 (或資源) 進行 read-modify-write (或者類似的動作(註一)) 時, 還沒來得及完成整個動作, 就被其他的執行緒插斷, 並且該執行緒也一樣對這個共用變數 (或資源) 進行 read-modify-write (或者類似的動作). 例如Thread1 和 Thread2 之間我們需要一個作為計數器的共用變數:

2021年8月17日 星期二

CR (Carriage Return, 0x0D = '\r') and LF (Line Feed, 0x0A = '\n')

 '\r'是回車,前者使游標到行首,(carriage return)ASCII碼(0x0D

'\n'是換行,後者使游標下移一格,(line feed)ASCII碼(0xoA)

\r 是回車,return
\n 是換行,newline
對於換行這個動作,unix下一般只有一個0x0A表示換行("\n"),windows下一般都是0x0D0x0A兩個字元("\r\n"),蘋果機(MAC OS系統)則採用回車符CR表示下一行(\r)

Unix系統裡,每行結尾只有“<換行>”,即“\n”;
Windows系統裡面,每行結尾是“<回車><換行>”,即“\r\n”;
Mac系統裡,每行結尾是“<回車>”,即“\r”。
一個直接後果是,Unix/Mac系統下的檔案在Windows裡開啟的話,所有文字會變成一行;而Windows裡的檔案在Unix下開啟的話,在每行的結尾會多車一個^M字元。
Dos和windows採用回車 換行CR/LF表示下一行,即^M$($不是換行符的表示,換行符沒有表示出來,$是文字結束EOF的表示)
而UNIX/Linux採用換行符LF表示下一行,即\n
蘋果機(MAC OS系統)則採用回車符CR表示下一行,即\r

CR用符號'\r'表示, 十進位制ASCII程式碼13, 十六進位制程式碼為0x0D;
LF使用'\n'符號表示, ASCII程式碼10, 十六製為0x0A. 所以Windows平臺上換行在文字檔案中是使用 0d 0a 兩個位元組表示, 而UNIX和蘋果平臺上換行則是使用0a或0d一個位元組表示.

由於dos風格的換行使用\r\n,把這樣的檔案上傳到unix,有些版本的vi不能識別\r,所以vi顯示時在行尾會出現^M出來,但是有些就能識別\r\n,正常顯示回車換行。