Etherrape/Verschlüssellung
From Lochraster
Contents |
[edit] Ansätze
Blockchipher:
DES AES IDEA Blowfish
Blockverschlüssellung ist zwar gut getestet aber DES ist zu langsam, IDEA ist patentiert, AES zwar sicher, aber schwierig zu implementieren. Rijndael wäre hier also das bevorzugte Ziel,
Streamcipher:
RC2 RC4
Stromverschlüssellungen sind flexibel einsetzbar und leicht zu implementieren. Zwar ist RC4 in WEP gebrochen, aber das ist ein Problem der Implementierung und es tritt nur bei großen Datenmengen auf.
Deshalb denke ich das RC4 erstmal der beste Trade-Off zwischen Sicherheit, Geschwindigkeit und Code-Größe ist.
[edit] AES
Folgt bald.
[edit] RC4
This code is taken from http://zer0.droids-corp.org/doxygen/html/rc4_8c-source.html.
Inspired by the ARC4 implementation by Christophe Devine.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
#rc4.h
typedef unsigned char u08; struct rc4_state { u08 x, y; u08 m[256]; }; void rc4_init( u08 *key, u08 length ); u08 rc4_crypt_char(u08 data); #endif /* rc4.h */
#rc4.c
#include "rc4.h" struct rc4_state s; void rc4_init(u08 *key, u08 length ) { u08 i, j, k, a; u08 * m; s.x = 0; s.y = 0; m = s.m; i=0; m[i] = i; for( i = 1; i !=0 ; i++ ) { m[i] = i; } j = k = 0; i=0; a = m[i]; j = (u08) ( j + a + key[k] ); m[i] = m[j]; m[j] = a; if( ++k >= length ) k = 0; for( i = 1; i != 0 ; i++ ) { a = m[i]; j = (u08) ( j + a + key[k] ); m[i] = m[j]; m[j] = a; if( ++k >= length ) k = 0; } } u08 rc4_crypt_char(u08 data) { u08 a, b; s.x = (u08) ( s.x + 1 ); a = s.m[s.x]; s.y = (u08) ( s.y + a ); s.m[s.x] = b = s.m[s.y]; s.m[s.y] = a; data ^= s.m[(u08) ( a + b )]; return data; } void rc4_crypt(unsigned char *data, int length ) { int i; for (i=0 ; i<length ; i++) data[i] = rc4_crypt_char(data[i]); } static unsigned char keys[30]={8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}; static unsigned char data_len=8; static unsigned char data[30]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff}; static unsigned char output[30]={0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00}; int testrc4( void ) { u08 i; u08 buffer[30]; uart_puts_P( "\n RC4 Validation Test:" ); memcpy( buffer, data, data_len ); rc4_init( &keys[1], keys[0] ); rc4_crypt( buffer, data_len ); if( memcmp( buffer, output, data_len ) ) { uart_puts_P( "failed!\n" ); while( 1 ); } uart_puts_P( "passed.\n" ); }
Dieser Code kann einfach per copy und paste verwendet werden, es MÜSSEN noch die Schlüssel geändert werden!!! Weiterhin muss man noch Daten in PC ver-und-entschlüsseln können. RC4 ist zwar in OpenSSL implementiert, jedoch gelang es mir nicht etwas damit zu entschlüsseln, was vom etherrape kam. http://www.cypherspace.org/adam/rsa/rc4.c funktioniert dagegen.
[edit] Weblinks
- WEP und RC4 --> http://de.wikipedia.org/wiki/RC4
- Encryption on embedded devices --> http://moss.csc.ncsu.edu/~mueller/ftp/pub/mueller/papers/wsna03.pdf
- Etherrape with RC4, Cast5 and Skipjack authentification: http://www.ethersex.de
- Crypto-AVR-Lib, eine Sammlung verschiedener Kryptofunktionen für AVRs (u.a. SHA256, 3DES, XTEA, CAST5, Skipjack): http://www.das-labor.org/wiki/Crypto-avr-lib