記錄背景:最近在用Vivado評估國外一個公司所提供的ISE所建的工程時,因爲我並無安裝ISE工程,所以將其提供的全部v文件導入到Vivado中,對其進行編譯。添加完以後成功創建頂層文件,但奇怪的是,除了頂層文件的v文件能夠正常打開編輯外,其它sub層的v文件都沒法正常打開編輯,雙擊打開後顯示的是亂碼,繼續查找它們與頂層文件有什麼不一樣時,發現這些文件的屬性之一——encrypted 都是「yes」狀態。算法
這多少有點震驚我了,我以前只知道爲了保護某文件的保密性時,通常都是生成網表(ncg?netlist?)文件以便提供他人使用,別人拿到的網表文件只是個空殼子,儘管調用就好,裏面的代碼對他來講就是個空殼子。編程
爲了知作別人是怎麼作到v文件加密的(感受逼格挺高的),上網搜索一番,最後,最後,最後發現是須要Xilinx提供特定的工具才能夠(而這一說法也獲得了Xilinx的FAE的認證),而這個特定的工具通常只有Xilinx的高級客戶纔會擁有。好吧,繼續挖掘的衝動忽然就猝死了。工具
--------------------------------------------------------------------------------------------------------------------------------------------開發工具
轉自:https://blog.csdn.net/u010161493/article/details/79200527,若有侵犯,請告知刪除,抱歉!加密
xilinx的V6和7全系列FPGA支持AES256加密,加密的好處:
1,能夠防止別人回讀或者對你的程序進行逆向讀取;
2,防止更改燒寫的bit文件。
若是僅僅是防止回讀,能夠簡單設置BITSTREAM.READBACK.SECURITY,其中LEVEL1是禁止回讀,LEVEL2禁止回讀和從新燒寫FPGA。
但若是對手的逆向能力很強,好比說在FPGA上電加載bit的時候用邏輯分析儀把用bit文件「讀」出來,這個簡單的設置確定就不行了。這時候可使用AES256加密。spa
AES即高級加密標準,是一種區塊加密,固然也是對稱加密。區塊固定爲128bit,祕鑰爲128,192或256bit。AES有5種加密模式,xliinx採用的是CBC模式。有一個128bit初始向量IV(startCBC),先利用初始向量IV與第一組數據進行異或後再進行加密運算生成C1。將C1做爲初始向量與第二組數據進行異或後再進行加密運算生成C2。以此類推,當最後一組數據加密完畢後,將加密結果拼接爲最終結果,C = C1C2C3……Cn。
因此採用CBC模式的256AES須要兩個東西,128bit-startCBC和256bit-AES key。.net
到這裏還沒完,完成了bit加密尚未認證,萬一別人把燒進去bit文件篡改了怎麼辦?(從新燒了新的bit文件)。因此xilinx又提供了HMAC的認證,這個就跟校驗差很少了,檢查消息的完整性。3d
因此還須要提供256bit-HMAC,加上128bit-startCBC和256bit-AES key,一共是三個。這三個key能夠本身生成,也能夠指定空的 .nky文件,由軟件隨機生成好。
for example
···
Device xc7a35t;
Key 0 0f2ec1178ae0d04c8c1431afe8266d08e799b01c5c486c2567f3621f47319aaf;
Key StartCBC a6262d508c338eeab815340a7832436d;
Key HMAC d82e72733a7bd7904c802d13db37187b8ad20b972ac163470c5a4d239bce6308;
···
加密的AES key能夠存到FPGA內部易失性的BBR或只能燒寫一次(OTP)的eFUSE中。
BBR須要電池供電,能夠屢次編程。eFUSE不須要電池,但只能燒寫一次。這裏使用eFUSEblog
首先來看一下eFUSE寄存器:
一共有四個寄存器,分別是存放AES祕鑰,用戶信息,設備DNA和eFUSE控制。下面特別關注一下eFUSE控制寄存器:圖片
一共有6個bit有用,各類設置的優缺點表裏有詳細說明,使用參考設置101100就好了。
其中bit0很重要,萬一置位了,AES的key又搞丟了,FPGA就變磚頭了。
下面三個key能夠本身生成填進去,也能夠由軟件隨機生成。
要打開edit device properties,先要打開sythesized design 或者implement design,而後在generate bitstream右鍵設置
program
很簡單,讀出mcs而後燒到另外一個FPGA裏面去,能夠看到不能工做。固然,也能夠在前面eFUSE設置時選擇只能加載AES加密的bit文件,這樣換一個不加密的bit下進去也能驗證。
**********************************************************************************************************************
Q1:在bitstreams中的edit device property選項中,沒有encyption選項,因此沒法設置efues。
A1:這應該是開發工具版本太低的緣由,升級到新版本試試。