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

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

3天內(nèi)不再提示

關于工程安全保護的FPGA設計方案

要長高 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-04 11:36 ? 次閱讀

隨著設計需求的不斷復雜化,設計工程規(guī)模的越來越大,整個設計會分給多個人,甚至多組人來協(xié)同開發(fā)。每個部分由擅長的人來處理。

如果一個設計是由多個組/公司來協(xié)同完成的,通常會引入一個新問題:知識版權的保護。有些創(chuàng)新的設計方案并不想讓對方簡單獲取。這樣,就有對原始設計進行保護的一些方案。

還有一種情況是,整個FPGA設計都由一個組來進行設計,但是不希望硬件層面上被簡單復制(防止抄板),所以對整個FPGA的設計及交付的配置鏡像,也需要一些保護方案。

文本簡單討論一下相關的保護方案。請注意,沒有一種方案可以百分之百保護設計的安全。大部分方案只是提高破解成本。當破解成本比較高的時候就足夠了。

關于子模塊的方案保護

這種情況常見于兩組(或者更多組)協(xié)同開發(fā)一個工程,其中一組設計一個子模塊,并將設計交予另一組進行系統(tǒng)集成,同時不希望系統(tǒng)集成的人員獲取原始設計思路。

這種情況最常見的方案就是IP。FPGA的EDA工具ISE、Vivado和Quartus都提供了大量IP,其中的不少IP都是不提供底層源碼的。用戶可以使用但是并不能獲取原始設計。

比較常見的做法是提供綜合后的網(wǎng)表。ISE使用綜合后的ngc文件,Vivado的網(wǎng)表文件都是dcp文件。Quartus中使用過qxb和qdb文件。另外Vivado也是支持通用的EDIF格式文件,Quartus沒有確認過,不過道理上應該也是支持EDIF的。

poYBAGLCX9qAS06gAAGutvlW4RU286.png

Vivado dcp文件就是一個zip壓縮包

使用網(wǎng)表就可以正常進行布局布線。優(yōu)點是制作/提供網(wǎng)表的操作上手方便,使用簡單。弊端是:

1.不方便調(diào)式,尤其是不方便在系統(tǒng)集成時使用嵌入式邏輯分析儀;

2.如果時序有問題,不容易做優(yōu)化;

不過使用IP、網(wǎng)表和其他原設計保護方案都有這個問題,所以算是通病,也沒有很好的辦法解決。

使用網(wǎng)表的另一個問題是無法仿真,尤其是ngc/dcp這樣EDA工具自己定義的網(wǎng)表格式。IP內(nèi)部除了包含網(wǎng)表文件還有仿真需要的文件。綜合/布局布線時使用對應的網(wǎng)表,仿真時使用仿真專用的文件/網(wǎng)表。所以單單提供網(wǎng)表,對仿真是個大問題。如果有額外的人力,可以提供相關仿真文件。但是為了保證網(wǎng)表和仿真文件行為一致,并且需要依據(jù)項目的進度進行網(wǎng)表文件與仿真文件的同步更新,這個工作量并不小。通常只有專業(yè)的團隊,才會有足夠的人員來做這件事情。

這其實也就是版本管理的困難,當版本中的文件越來越多,版本管理的難度就越來越來。通常子模塊的設計團隊都很難有足夠的人力/時間來很好的處理可綜合設計和不可綜合的仿真版本之間的版本管理。這里需要注意的是

仿真版本設計的難度并不比可綜合設計簡單。

1.如果簡單的提供可綜合版本的源代碼,則無法起到保護原始設計的作用。

2.如果使用加密或者仿真工具支持的非源代碼格式,首先要保證仿真工具支持這個功能,其次綁定了工具對版本管理也是增加了負擔。

3.比較常用的方法是使用不可綜合的仿真代碼來實現(xiàn)一樣的功能。這就需要較為復雜的設計。代碼中要盡量做到不涉及原始設計思路,等于是要徹底換一個思路來設計一樣的東西,而且還要盡量做到難看懂。

還有一種做法就是用C語言實現(xiàn)功能,然后用Verilog和C語言的接口來實現(xiàn)仿真。這樣核心功能是C語言實現(xiàn)的,自然保證了無法綜合。同時,軟件語言也更加容易做到無法獲取原始設計思路。這部分可以參考Verilog PLI。

這里要插一句,Vivado工具可以將dcp文件,進行適當分析并生成Verilog文件。生成的文件可讀性很差,但是可以用于仿真。不過從功能角度說,工具反推回來的Verilog是否正確,就不太容易保證了。本人曾經(jīng)嘗試過這種方法,在仿真階段遇到了諸多問題,雖然最終可以解決問題并且實現(xiàn)仿真,但需要修改和調(diào)整的地方還是非常多的,有一定的工作量。

目前Xilinx Vivado工具提供了一種加密方式來對源代碼進行加密。使用這種方法后,可以直接提供加密后的源代碼。這樣的好處很多:1.源代碼不綁定器件,所以跨器件的移植更容易;2.原代碼參與綜合,這樣綜合工具可以在綜合階段就有機會進行合適的優(yōu)化;3.不影響仿真。

這種方法幾乎和源代碼一樣、唯一的問題是需要解密。由于Vivado是全功能的工具(Quartus的仿真功能使用的是Modelsim,所以嚴格說不是全功能的工具),所以只要購買了這一功能的license,就可以用Vivado工具來進行設計。不過同時帶來的問題是,只能使用Vivado。具體的影響是:

1.使用的器件必須是Vivado所支持的,也就是說如果設計需要在Spartan-6或者Altera的器件上運行,就需要另外的加密手段,也就無法統(tǒng)一保護代碼/設計的手段,從公司和項目角度來看,這種方法會增加維護的成本。

2.部分公司的開發(fā)流程是使用獨立的仿真工具/綜合工具,這樣就需要第三方工具也支持這個加密與解密,可能會一定程度上限制使用。

第三種保護原始設計的方法,擁有之前兩種方法的幾乎全部缺點,而且更加麻煩。但是相對的,保護原始設計的程度最高。這種方法就是,部分動態(tài)重配置。

這種方法的做法是子模塊的設計團隊可以獲取頂層工程,然后依據(jù)工程設計出子模塊的部分動態(tài)重配置的配置文件。FPGA最終加載的時候,先加載不包含子模塊的靜態(tài)部分配置文件,然后加載子模塊的配置文件,通過兩次加載來組合出完整的功能。

這種方法的優(yōu)點是最終提供的是配置文件,所以幾乎不可能恢復出原始設計,而且部分的配置文件和整體工程是相關聯(lián)的,導致一個配置文件只適配一個工程(甚至只適配一個工程的一個版本)。這樣就非常容易控制好子模塊的使用情況。但缺點就是過于復雜和麻煩,不僅僅無法仿真,無法調(diào)試,而且也固定器件型號,并固定EDA工具版本。同時還需要做大量的時序優(yōu)化來減少設計分區(qū)對時序的影響。由于這一方案的成本過高,所以只有極為少數(shù)的公司在非??粗乇C艿臈l件下,才會使用動態(tài)重配置技術。

最后一種方案是從可讀性入手。如果源代碼的功能正常,但是可讀性非常非常差,就可以既保證源代碼的使用,同時又可以一定程度來保護原始設計。這種方法可以稱之為代碼加擾,或者代碼混淆。(下文會使用代碼混淆這個稱呼)

代碼混淆是在不違反語法錯誤的條件下對信號名和代碼結構進行重新處理,處理后的代碼可讀性非常非常低。通常情況下,在不熟悉代碼結構的時候就直接讀沒有文檔沒有注釋代碼,本身就是一個非常辛苦的工作(所以基本上寫代碼的童鞋都不愿意讀別人寫的代碼)。如果再對變量名和代碼結構做一定程度的調(diào)整,可以大大增加讀代碼的困難。通讀代碼、理清結構的成本已經(jīng)和完全重新設計差不多高,以此來達到保護設計的目的。

通常代碼混淆分為變量混淆和格式混淆。變量混淆是將信號名全部替換成無意義的字符串。格式混淆是將代碼格式進行打亂,不容易理解代碼的“分段”,從而增加理解代碼結構的難度。從最終出來的效果看,想要讀懂代碼的難度實在太大了。

這種方法交付的依然是原始代碼,擁有源代碼的所有優(yōu)點,可以進行仿真,便于移植。同時由于是合乎語法的處理,所以對工具沒有任何限制。所以呢,如果看到一個寫的很糟糕的代碼,不要直接下定義認為是作者太隨意或者水平太差,也許是故意寫出來不想讓別人看懂呢。

FPGA配置文件的保護方式

通常配置文件是保存在FPGA片外Flash中。FPGA和Flash之間的連接是通過PCB連線。這樣的問題是,很容易獲取Flash中的原始數(shù)據(jù)(取下Flash或者截取加載時的原始數(shù)據(jù))。為了對配置文件進行保護,Xilinx平臺的FPGA可以有以下幾種方案可以考慮。Altera平臺沒有深入的研究過,猜測推想,應該是有類似的加密功能。

內(nèi)置Flash

部分FPGA芯片內(nèi)置了配置用的Flash,這樣很好的保護了Flash和其于FPGA的連接。一般來說很難獲取Flash中的數(shù)據(jù)。目前這一類芯片有Xilinx Spartan-3AN和Altera Max10。這一方案比較大的問題是,可選芯片太少。

AES加密

Xilinx的FPGA提供了AES加密功能,具體就是由用戶定義一個(或者用工具隨機生成一個)密鑰,存儲在FPGA中,同時對bit文件進行加密。由加密后的bit文件衍生的MCS/BIN文件都是經(jīng)過了加密的,所以最終Flash中存儲的版本也是經(jīng)過加密的。這樣即使Flash中的數(shù)據(jù)被獲取,沒有密鑰也無法使用。根據(jù)密鑰存儲的不同分為AES-BRAM和AES-EFUSE。

AES-BRAM是將密鑰存儲在一個特殊的BRAM中,這個BRAM可以用單獨的電源供電。當徹底掉電時,密鑰立即丟失,無法回復。所以這一方案需要為存儲密鑰的BRAM電源提供一個紐扣電池進行供電。

AES-EFUSE是將密鑰存儲在FPGA內(nèi)置的,只能寫入一次的EFUSE寄存器中,同時必須使用原廠的JTAG Cable。寫入后密鑰將永遠保存在EFUSE中,用于解密。

DNA加密

Xilinx的FPGA,每一個芯片都有一個唯一的編碼,成為eFuse ID。這個eFuse ID是64bit,其中57bit作為DNA提供給客戶使用。大部分情況下,用戶拿到的量產(chǎn)芯片中,DNA是不會重復的。此時可以作為一個加密的方法。

DNA加密的原理是在設計中加入讀取DNA的模塊,讀取DNA后和內(nèi)置存儲的數(shù)據(jù)作對比,如果發(fā)現(xiàn)不一樣則停止工作。

pYYBAGLCX-GAe266AACmKN2PqS0134.png

由于這種方法是寫入設計中的,所以如果沒有原始工程,幾乎無法破解。另外DNA又幾乎不會重復,所以一個bit文件對應一個FPGA芯片,可控性非常好。但是麻煩的是,對于量產(chǎn)的產(chǎn)片,每個產(chǎn)品都需要準備一個bit文件,這很大程度上加大了生產(chǎn)成本。

由于這個問題,出現(xiàn)了幾種DNA用法的變種。

1.自動處理DNA

這種方法是在設計中先查看Flash特定的區(qū)域,是否有需要的標識符。如果沒有,則自動讀取DNA,并通過一定的加密計算(當然也可以直接使用原始數(shù)據(jù))換算出另一個值,然后將數(shù)據(jù)寫入Flash,并填充標志位。如果發(fā)現(xiàn)有標志位,則按規(guī)定的地址讀取DNA數(shù)據(jù),進行解密,然后和DNA進行對比。這種方案及利用了DNA的唯一性,又便于批量生產(chǎn)。但是代價是DNA數(shù)據(jù)是存儲在Flash中的。如果檢查Flash的數(shù)據(jù),是有機會找到DNA的數(shù)據(jù),此時結合FPGA的DNA原始數(shù)據(jù),在加密算法不麻煩的情況下有機會做解密。這樣是可以進行破解的。如果使用更強大的加密算法,又會增加設計的成本。

2.部分動態(tài)重配置

主體設計中不包含DNA信息,將DNA的讀取和識別放入一個占用資源極少、交互接口最簡單的動態(tài)重配置部分,這樣極大的降低使用部分動態(tài)重配置的難度。在生產(chǎn)環(huán)節(jié),交付統(tǒng)一的配置文件進行生產(chǎn)。在測試環(huán)節(jié),如果產(chǎn)品需要逐一進行測試(現(xiàn)在很多電子產(chǎn)品都是100%測試而不是抽查),選擇合適的動態(tài)配置文件寫入Flash進行測試。這樣一定程度上降低了使用成本并有較高的保密性。這種方案僅適合需要對產(chǎn)品進行100%充分測試的生產(chǎn)流程,否則依然會極大的提高生產(chǎn)成本。

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

    關注

    1625

    文章

    21636

    瀏覽量

    601315
收藏 人收藏

    評論

    相關推薦

    FPGA設計大賽設計方案提交規(guī)則和截止時間須知

    各位FPGA設計大賽參賽者注意了:小編這里幫大家解釋一下設計方案提交規(guī)則和活動時間安排 自4月23日比賽開始,參賽者報名之后即可提交設計方案。設計方案提交的截止日期是活動結束,暨
    發(fā)表于 05-04 10:27

    提交FPGA設計方案,贏取賽靈思FPGA開發(fā)板

    “玩轉FPGA:iPad2,賽靈思開發(fā)板等你拿”活動持續(xù)火爆進行中……………………活動得到了廣大電子工程師積極強烈的支持,為了回報電子工程師和網(wǎng)站會員,現(xiàn)在只需提交fpga
    發(fā)表于 07-06 17:24

    FPGA典型設計方案精華匯總

    FPGA典型設計方案精華匯總
    發(fā)表于 08-16 16:29

    多種EDA工具的FPGA設計方案

    多種EDA工具的FPGA設計方案
    發(fā)表于 08-17 10:36

    基于FPGA的變頻器設計方案,利用simulink仿真

    上學時做的變頻器設計方案,利用simulink仿真,基于FPGA的變頻器設計方案
    發(fā)表于 09-10 10:40

    鍋爐汽包水位保護設計方案

    鍋爐汽包水位保護設計方案 鍋爐汽包水位保護是保證鍋爐安全穩(wěn)定運行的重要手段。
    發(fā)表于 04-01 09:47 ?25次下載

    USB電路保護設計方案

    USB電路保護設計方案       PPTC(聚正溫度系數(shù))裝置是對電腦及有關裝置提供電流過載保護的一種既
    發(fā)表于 04-19 11:59 ?2627次閱讀
    USB電路<b class='flag-5'>保護</b><b class='flag-5'>設計方案</b>

    多種EDA工具的FPGA設計方案

    多種EDA工具的FPGA設計方案 概述:介紹了利用多種EDA工具進行FPGA設計的實現(xiàn)原理及方法,其中包括設計輸入、綜合、功能仿真、實現(xiàn)、時序仿真、配
    發(fā)表于 05-25 17:56 ?727次閱讀
    多種EDA工具的<b class='flag-5'>FPGA</b><b class='flag-5'>設計方案</b>

    基于FPGA的OLED真彩色顯示設計方案

    基于FPGA的OLED真彩色顯示設計方案
    發(fā)表于 01-18 20:35 ?25次下載

    基于FPGA的調(diào)焦電路設計方案資料下載

    基于FPGA的調(diào)焦電路設計方案資料下載
    發(fā)表于 05-07 15:53 ?10次下載

    基于FPGA的二進制相移鍵控設計方案

    基于FPGA的二進制相移鍵控設計方案
    發(fā)表于 05-28 09:36 ?12次下載

    基于CPLD/FPGA的半整數(shù)分頻器設計方案

    基于CPLD/FPGA的半整數(shù)分頻器設計方案
    發(fā)表于 06-17 09:37 ?21次下載

    基于FPGA的偽隨機數(shù)發(fā)生器設計方案

    基于FPGA的偽隨機數(shù)發(fā)生器設計方案
    發(fā)表于 06-28 14:36 ?4次下載

    電力變壓器保護設計方案

    電力變壓器保護設計方案
    的頭像 發(fā)表于 10-23 09:35 ?681次閱讀
    電力變壓器<b class='flag-5'>保護</b><b class='flag-5'>設計方案</b>

    基于CPLD/FPGA的多串口擴展設計方案

    電子發(fā)燒友網(wǎng)站提供《基于CPLD/FPGA的多串口擴展設計方案.pdf》資料免費下載
    發(fā)表于 10-27 09:45 ?3次下載
    基于CPLD/<b class='flag-5'>FPGA</b>的多串口擴展<b class='flag-5'>設計方案</b>