Проект ясно показывает, что RSA компонент не удобен для выполнения на FPGA, потому что возведение в степень по модулю, тест на простоту и операции gcd требуют много регистров для сохранения промежуточных результатов. В FPGA регистр является дефицитом, потому что каждый CLB имеет лишь два запускаемых фронтом D триггера. Для выполнения RSA для деталей должны существовать более эффективные алгоритмы.
1. J. W. Lockwood, C. Neely, C. Zuver, J. Moscola, S. Dharmapurikar, and D. Lim, "An Extensible, System-On-Programmable-Chip, Content-Aware Internet Firewall." Field Programmable Logic and Applications, paper 14B, Sep. 2003.
2. http://www.x5.net/faqs/crypto/q19.html
3. J. Fry, and M. Langhammer, "FPGAs Lower Cost for RSA Cryptography." http://www.commsdesign.com/design_corner/OEG2003926S0022
4. J. W. Lockwood, N. Naufel, J. S. Turner, and D. E. Taylor, "Reprogrammable Network Packet Processing on the Field Programmalbe Port Extender (FPX)." ACM International Symposium on Field Programmable Gate Arrays, Feb. 2001, pp. 87-93.
5. R. Rivest, A. Shamir, and L. Adleman, "A Method for Obtaining Digital Signatures and Public Key Cryptosystems." Communications of the ACM, Feb. 1978.
6. J. K. Omura, "A Public Key Cell Design for Smart Card Chips." International Symposium on Information Theory and its Applications, pp. 983-985, Nov. 1990.
7. C. K. Koc, "RSA Hardware Implementation." RSA laboratories Technical Report TR-801, Ver. 1.0, Apr. 1996.
8. G. Miller, "Riemann's Hypothesis and Tests for Primality." Proceeding sof the 7th Annual ACM Symposium on the Theory of Computing, May 1975.
9. M. Rabin, "Probabilistic Algorithms for Primality Testing." Journal of Number Theory, Dec. 1980.
10. William Stallings, "Cryptography and Network Security: Principles and Practices." 3rd edition, 2003.
11. http://www.arl.wustl.edu/~jl1/education/cs502/course_project.htm
12. Bruce Schneier, "Applied Cryptocraphy: Protocols, Algorithms, and Source Code in C." 2nd edition, 1996.
13. http://wikipedia.org
ПРИЛОЖЕНИЕ А
Структура файлов исходного кода написанного на VHDL:
► add_sub_1024.vhd
► div_1024.vhd
► gcd.vhd
► gen_n.vhd
► lfsr_512.vhd
► mod_exp_1024.vhd
► mod_mult_1024.vhd
► mult_1024.vhd
►lfsr_512.chd
► prime_rom.vhd
Текст файла «add_sub_1024.vhd» :
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity add_sub_1024 is
port (
clk : in std_logic;
reset_l : in std_logic;
start : in std_logic;
ready : out std_logic;
ADD: IN std_logic;
A: IN std_logic_VECTOR(1023 downto 0);
B: IN std_logic_VECTOR(1023 downto 0);
C_IN: IN std_logic;
C_OUT: OUT std_logic;
s_valid : out std_logic;
S: OUT std_logic_VECTOR(1023 downto 0));
end add_sub_1024;
architecture my_add_sub of add_sub_1024 is
component add_sub_32
port (
A: IN std_logic_VECTOR(31 downto 0);
B: IN std_logic_VECTOR(31 downto 0);
C_IN: IN std_logic;
C_OUT: OUT std_logic;
ADD: IN std_logic;
S: OUT std_logic_VECTOR(31 downto 0));
end component;
signal a_i,b_i,s_i: std_logic_vector(31 downto 0);
signal c_out_i : std_logic;
signal add_i : std_logic;
signal c_in_i : std_logic;
signal a_buf, b_buf : std_logic_vector(991 downto 0);
signal reset_l_1: std_logic;
type add_state is (idle, level0, level1, level2, level3, level4, level5, level6, level7, level8, level9, level10, level11, level12, level13,level14, level15, level16, level17, level18, level19, level20, level21, level22, level23, level24, level25, level26, level27, level28, level29, level30, level31);
signal state, nxstate : add_state;
begin
my_add_sub : add_sub_32
port map (
A => a_i,
B => b_i,
C_IN => c_in_i,
C_OUT => c_out_i,
ADD => add_i,
S => s_i);
process(clk)
begin
if clk'event and clk = '1' then
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.