1 / 21

January 30, 2006

Team M1 Enigma Machine Adithya Attawar (M11) Shilpi Chakrabarti (M12) Zavo Gabriel (M13) Mike Sokolsky (M14). January 30, 2006 Original mechanical design revisited, High-level software simulation, Architecture flowcharts. Status. Finished: Design selections Block diagram for processes

malaya
Télécharger la présentation

January 30, 2006

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Team M1Enigma MachineAdithya Attawar (M11)Shilpi Chakrabarti (M12)Zavo Gabriel (M13)Mike Sokolsky (M14) January 30, 2006 Original mechanical design revisited, High-level software simulation, Architecture flowcharts

  2. Status • Finished: • Design selections • Block diagram for processes • High-level implementation in C • To Do: • Behavioral Verilog (almost done) • Schematic • Layout • Testing • Simulation

  3. Functional Description • Enigma Operation Revisited

  4. Enigma Operation: Rotors & Reflector • 26 spring-loaded contacts on each side • Set to an arbitrary initial position for each message • Each rotor has unique internal wiring to perform letter swaps • Rightmost rotor steps one notch with each keystroke, the others every 26, 262, etc. • Reflector does not move; hard-wired; swaps letters and ‘reflects’ signal back through rotors

  5. Enigma Operation: Steckerboard • Manually wired and changed daily • Daily settings specified in codebooks given to operators • Matched letter pairs (A-J, J-A) • Increased number of possible machine configurations by 26*24*22*… = ~1013

  6. Design Decisions • Revised entire system architecture • Modular design – able to add/revise components without changing basic architecture • Implement steckerboard, rotors, reflector using memories • Address: (Character + Wheel Position)%26 • Value in cell: New character for next swap • Will need to implement a 5-bit modulo-26 adder • Serial input of initial rotor settings/order

  7. Steckerboard Memory • 26x5-bit cells • Programmable by user on startup • Stores information about swaps • newChar = stecker[currentChar] • Swaps MUST BEmatched pairs: • If stecker[A] = ‘G’ then stecker[G] = ‘A’

  8. Rotor and Reflector Memory • Same basic idea as Steckerboard • 8 “rotors”: • 26x5-bit cells • Swaps are NOT matched pairs • 1 “reflector” • 26x5-bit cells • Swaps MUST BE matched pairs • Differences: • Not programmable: bits in memory are permanently set during manufacturing • Swap pairs unique to each wheel • Control logic specifies how many “rotors” used, in what “position,” and in what order

  9. I-Reg Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  10. I-Reg Character Input Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  11. I-Reg Steckerboard Swap & Increment Wheels Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  12. I-Reg Calculate Rotor Swap Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  13. I-Reg Store New Character from Rotor Swap Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  14. I-Reg Calculate Reflector Swap Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  15. I-Reg Store New Character from Reflector Swap Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  16. I-Reg Calculate Reverse Rotor Swap Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  17. I-Reg Store New Character from Reverse Rotor Swap Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  18. Steckerboard Swap & Output Encrypted Character I-Reg Plug Input Wheel Select N-Reg C-Reg ROM 232 X 5bit 5-bit %26 Adder RAM 26 X5bit Wheel Pos + 13 % 26 O-Reg

  19. Implementation in C (snippet) • while((ch_in=(char)getchar())!=10){ // take input until <ENTER> • c_reg = (unsigned short) ch_in - 97; // ASCII 'a' is value 97 so correct to a=0 • if(c_reg>25) • exit(0); • if((wheel_pos[wheel_order[0]] = (wheel_pos[wheel_order[0]]+1)%26)==0) // rotate wheels • if((wheel_pos[wheel_order[1]] = (wheel_pos[wheel_order[1]]+1)%26)==0) • if((wheel_pos[wheel_order[2]] = (wheel_pos[wheel_order[2]]+1)%26)==0) • if((wheel_pos[wheel_order[3]] = (wheel_pos[wheel_order[3]]+1)%26)==0) • if((wheel_pos[wheel_order[4]] = (wheel_pos[wheel_order[4]]+1)%26)==0) • if((wheel_pos[wheel_order[5]] = (wheel_pos[wheel_order[5]]+1)%26)==0) • if((wheel_pos[wheel_order[6]] = (wheel_pos[wheel_order[6]]+1)%26)==0) • if((wheel_pos[wheel_order[7]] = (wheel_pos[wheel_order[7]]+1)%26)==0); • //printf("%d %d ",wheel_pos[wheel_order[0]],wheel_pos[wheel_order[1]]); • if(use_stecker) // initial stecker use • c_reg = stecker[c_reg]; • for(i=0;i<num_wheels;i++) { // step through wheels • c_reg = wheel_settings[wheel_order[i]][(c_reg+wheel_pos[wheel_order[i]])%26]; • if(DEBUG) • printf("%c ",(char)(c_reg+97)); • } • if(reflect){ // if we're reflecting, which it looks like you have to do for it to work • c_reg = reflector[c_reg]; // look up new value in reflector • if(DEBUG) • printf("%c ",(char)(c_reg+97)); • for(i=num_wheels-1;i>=0;i--){ // now go through backwards, find the location in the wheel that holds • j=0; // the value of c_reg, and save the location into c_reg • while(wheel_settings[wheel_order[i]][(j+wheel_pos[wheel_order[i]])%26]!=c_reg) • j++; • c_reg = j; • if(DEBUG) • printf("%c ",(char)(c_reg+97));

  20. Implementation in C • Fully simulates an Enigma with up to 8 rotors, a reflector, and a steckerboard • Sample output • 3 rotors: order 1-2-0, setting F-H-J • 5 stecker pairings: AP, CN, HS, KT, VX cmu-163055:~/Documents/Programs/Enigma mvs$ ./enigma helloworld (Input string from user) xoserrykrb (Encoded output) cmu-163055:~/Documents/Programs/Enigma mvs$ ./enigma xoserrykrb (Input string – the encoded text back in) helloworld (Output – encrypt and decrypt are the same)

  21. Problems & Questions • How to make it more secure? • Variable rotor increments? • Must be some function of input character to preserve symmetrical encrypt/decrypt • Otherwise you lose your message!

More Related