70 likes | 436 Views
E-Voting Machine - Design Presentation. Group M1 Bohyun Jessica Kim Jonathan Chiang Chi Ho Yoon Donald Cober. Mon. Sept 22 Behavioral Verilog code TEA encryption description Revised transistor counts. Secure Electronic Voting Terminal. E-Voting Overall System Block Diagram. T: 320.
E N D
E-Voting Machine - Design Presentation • Group M1 • Bohyun Jessica Kim • Jonathan Chiang • Chi Ho Yoon • Donald Cober Mon. Sept 22 Behavioral Verilog code TEA encryption description Revised transistor counts Secure Electronic Voting Terminal
E-Voting Overall System Block Diagram T: 320 INPUTS FSM T: 1536 8 Machine Initialization FSM 5 Encryption Key SRAM (32 byte) Card Reader 1 8 8 Finger Print Scanner 1 T: 160 5 9 9 8 1 1 Discrete Buttons User Input T: 384 COMMS T: 5000 User Identification FSM 64 64 9 Regis- ter Encryption Transmit Keyboard 9 Decryption Receive 1 T: 160 64 64 T: 5000 6 8 1 Selection FSM 9 10 T: 192 Write-In SRAM (64 byte) 9 9 2 Choice SRAM (4 byte) 13 T: 240 Central Computer 8 T: 3072 9 9 1 1 1 1 Confirmation FSM T: 384 8 11 ID SRAM (8 byte) 14 T: 480 8 9 9 OUTPUTS T: 240 8 DISPLAY Serial Output Port 9 1 8 choices of candidates per page 4 pages 1 write-in per page
Encryption Key SRAM (32 byte) 5bit Address 8bit Data Register 64bit TX Encryption 64bit TX Transmit 1bit TX 1bit RTS 8bit Data (TX) 1bit CTR 8bit Data (RX) 64bit RX Decryption 64bit RX Receive 1bit RX COMMS
Tiny Encryption Algorithm Project Specs Origin: David Wheeler and Roger Needham of Cambridge Computer Laboratory First Published 1994 Original Implementation: 64-bit blocks: Two 32-bit inputs 128-bit key: Four 32-bit keys (K[0], K[1], K[2], K[3]) Feistel Structure: Symmetric structure used in block ciphers “Magic” constant: 9E3779B9 (Delta) = 2^32 / 1.6180339887 (golden ratio) 64 Feistel rounds = 32 cycles E-Voting Machine Implementation: 16-bit blocks: Two 8-bit inputs 32-bit key: Four 8-bit keys 32 Feistel rounds = 16 cycles Hardware: 4, 5-bit Shifters 16-bit Multipliers 16-bit Adder / Subtractor
Tiny Encryption Algorithm C Implementation #include <stdint.h> void encrypt (, uint32_t* v uint32_t* k) { uint32_t v0=v[0], v1=v[1], sum=0, i; /* 64-bit block set up */ uint32_t delta=0x9e3779b9; /* a key schedule constant */ uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* 128-bit cache key */ for (i=0; i < 32; i++) { /* basic cycle start */ sum += delta; v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1); v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3); } /* end cycle */ v[0]=v0; v[1]=v1; } void decrypt (uint32_t* v, uint32_t* k) { uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* 64-bit block set up */ uint32_t delta=0x9e3779b9; /* a key schedule constant */ uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* 128-bit cache key */ for (i=0; i<32; i++) { /* basic cycle start */ v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3); v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1); sum -= delta; } /* end cycle */ v[0]=v0; v[1]=v1; }
Questions? Thank you!