Проектирование специализированного микроконтроллера, реализующего полнофункциональную RSA схему шифрования, страница 7

Проект ясно показывает, что 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