[FPGA]

FPGA 디자인 보안[2] : 복잡한 시스템의 디자인 보안

Neo Park 2012. 3. 4. 15:47

 

 

엔지니어는 점점 더 복잡한 시스템의 설계에 직면한다.
그림 1 FPGA와 연결된 마이크로프로세서 시스템을 보여준다. 마이크로프로세서는 외부 PHY와 MAC이 집적된 FPGA의 이더넷 연결을

가지고 있다. FPGA는 SPI Flash로부터 컨피규레이션 된다. Flash와 RAM 메모리는 시스템을 위한데이터와 프로그램을 포함하고 있다.

만약 시스템의 업데이트가 필요하면, 데이터는 인터넷 연결을 통해 보내진다. 해당 애플리케이션의 보호를 위해, FPGA data와

bit stream은 암호화되어 있다. 그러나 마이크로프로세서로 가는 데이터와 명령은 암호화되지 않은 상태로 전송된다.

그러므로 이 데이터는 복사될 수 있을 것이다.

 

가능한 솔루션은 FPGA 내에 소프트 마이크로프로세서를 구현하는 것이다. 이는 FPGA 내부의 메모리 뱅크를 엑세스 할 수 있으며,

외부에선 나타나 보이지 않는다. 이 메모리 뱅크는중요한 알고리즘과 데이터를 저장할 수 있다.그림 2는 동일한 애플리케이션을 보여준다.
그러나 FPGA 내에 프로세서가 집적되어 있다.

 

 

그림 2의 마이크로프로세서는 LatticeMico32이다. 디-스크램블러는 디자이너에 의해 생성된다, 따라서 스크램블러는 보안이 된다.

디-스크램블러의 사용은 외부 메모리에 저장된, 암호화된 명령을 사용할 수 있다. 비트스트림의 암호화를 위해,

Lattice는 128비트 AES key를 제공한다.엔지니어는 Lattice의 소프트웨어 디자인 툴슈트인 ispLEVER를 사용하여 FPGA를 개발해야 한다.

 

 

 

합성, 매핑, P&R과 시뮬레이션 검증단계를 완료 시, 엔지니어는 최종 확인을 위해 비트스트림을 생성하고, ispVM 시스템을 사용하여

보드에 프로그램 할 것이다. 디자이너가 시스템 동작에 만족할 때가 디자인을 보호할 때이다. 비트스트림은 Lattice ispLEVER 툴 또는

Lattice 프로그래밍 툴인 ispVM 시스템을 사용하여 유저가 선택한 128비트 Key와 함께 암호화된다.

비트스트림은 16진수 또는 ASCII key로 인코딩된다.해당 key는 프로그래머블 메모리 영역에 저장되어야 한다. 프로그래밍은 JTAG포트를

통해 수행된다. FPGA는 해당 key에 의해 암호화된 비트스트림에 의해서만 컨피규레이션 될 수 있다.Lattice FPGA는 sysCONFIG 인터페이스

또는JTAG 인터페이스를 사용하여 프로그래밍 될 수있다.

sysCONFIG 인터페이스는 병렬 컨피규레이션 모드를 사용한 병렬 인터페이스 또는 FlashSPI, 메스 컨피규레이션 모드를 사용하여 데이터를 재-컨피규레이션을 가능케 한다.

JTAG 포트(IEEE 1149.1와 IEEE 1532 표준)는 1532모드 또는 비트스트림-버스트(고속 프로그램)모드로 프로그램 될 수 있다. JTAG포트를

통해 AES 128비트 key를 프로그램 되며, 이 128비트 key 사용을 위해, 특별한 모드에서만 되는 것은 아니다.Lattice FPGA 내의 코딩된 비트스트림의 재-판독되는 것을 예방한다. 이 컨피규레이션은 정상적으로 동작하게 하는 메커니즘이다.

비트스트림이 암호화되어 있지 않을 때, FPGA는 CRC를 확인한다. 만약 프로그래밍이 비정상적이면, DONE시그널은‘0’을 유지하고 INITN

시그널은‘0’로 변한다. JTAG 유저코드 레지스터는 유저가 접근할 수 있게 유지된다. FPGA가 비트 스트림을 암호 해독을 할 때,

FPGA 애플리케이션 버전으로 사용될 수 있는 해당 비트스트림 유저코드가 기록된다.

 


그림 4는 암호화된 비트스트림의 데이터 경로를 보여준다. 데이터가 FPGA로 들어갈 때, 디코더는 프리엠블과 모든 데이터를 읽는다.

만약 디코더가 암호화된 파일을 발견하면, 그리고FPGA key가 프로그램 되어 있지 않으면, 데이터는 봉쇄되고 DONE 시그널은

‘0’로 유지된다(컨피규레이션 실패를 의미). 만약 key가 프로그램 되어 있으면, FPGA는 정렬된 프리엠블인지를 확인한다.

FPGA는 데이터의 압축 여부를, 프리엠블을 통해 확인한다. 만약 데이터가 압축되어 있지 않으면, 디코딩 유닛에 바로 전송된다.

만약 압축되어 있으면, 디컴프레션 엔진에 먼저 전송되고 나서 디코딩 유닛으로 전송된다. CRC가 검증될 때, SRAM에 프로그램 된다.

DONE 비트가 다른 JTAG 체인의 컨피규레이션 데이터를 위해 활성화 될 때, 디컴프레션과 암호해독 엔진은 비 활성화된다.


Lattice의 경제적인 ECP2/M FPGA는 Flash가 내장된 비휘발성 LatticeXP2에 있는 FPGA 비트스트림 암호화 기능을 포함한다. LatticeXP2 FPGA는 비트스트림을 포함하는 Flash 맵과SRAM맵을 동일 칩 내에 합병되어 있다. 이는 보드 공간과 빠른 부트-업 시간이 중요할 때,

특히 유용하다.