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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

關(guān)于工程安全保護(hù)的FPGA設(shè)計方案

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

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

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

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

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

關(guān)于子模塊的方案保護(hù)

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

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

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

poYBAGLCX9qAS06gAAGutvlW4RU286.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FPGA配置文件的保護(hù)方式

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

內(nèi)置Flash

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

AES加密

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

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

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

DNA加密

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

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

pYYBAGLCX-GAe266AACmKN2PqS0134.png

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

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

1.自動處理DNA

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

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

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

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

    關(guān)注

    1624

    文章

    21568

    瀏覽量

    600567
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    FPGA典型設(shè)計方案精華匯總

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

    多種EDA工具的FPGA設(shè)計方案

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

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

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

    鍋爐汽包水位保護(hù)設(shè)計方案

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

    USB電路保護(hù)設(shè)計方案

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

    多種EDA工具的FPGA設(shè)計方案

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

    基于FPGA的OLED真彩色顯示設(shè)計方案

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

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

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

    基于FPGA的二進(jìn)制相移鍵控設(shè)計方案

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

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

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

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

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

    電力變壓器保護(hù)設(shè)計方案

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

    基于CPLD/FPGA的多串口擴(kuò)展設(shè)計方案

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