Wie ich hier bereits erwähnte, hab ich mir den Source von losetup (util-linux-2.11z-25) angeschaut. Nun hab ich dort folgenden Code gefunden:
Das ist nur ein kurzer Auszug.
Ersteinmal wollte ich fragen, ob dass nicht etwas gewagt ist, einfach 40 byte zu kopieren, die dann in 32-chars und 2 unsigned longs landet, immerhin muss ein unsigned long ja nicht 4 bytes lang sein (oder?).
Außerdem noch zum Hash. Es wird ja einmal das Passwort gehasht und dann das Passwort mit einem vorangestellten 'A' gehasht. Ist das nicht etwas unsicher? Es wird in diesem Fall zwar die Key-len auf 20 gesetzt, so das der zweite Hash nur für die inits sind, aber trotzdem! Könnte man die Keylenght nicht hochsetzen, oder wird es dadurch eher unsicherer?!
Und noch allgmeinen zu rmd160:
Es soll ein Hash sein, der ähnlich md4 ist und wie der Name schon sagt einen 160 bit (=20byte) Hash liefert. Leider habe ich nichts direkt zur Sicherheit gelesen, nur das der Hash "frei" ist.
Code:
#define HASHLENGTH 20
#define PASSWDBUFFLEN 130 /* getpass returns only max. 128 bytes, see man getpass */
#define LO_NAME_SIZE 64
#define LO_KEY_SIZE 32
struct loop_info {
//:
int lo_encrypt_key_size; /* ioctl w/o */
unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
unsigned long lo_init[2];
//:
};
//:
pass = getthepass("Password: ");
strncpy(passwdbuff+1,pass,PASSWDBUFFLEN-1);
passwdbuff[0] = 'A';
rmd160_hash_buffer(keybits,pass,strlen(pass));
rmd160_hash_buffer(keybits+HASHLENGTH,passwdbuff,strlen(pass)+1);
memcpy((char*)loopinfo.lo_encrypt_key,keybits,2*HASHLENGTH);
//:
loopinfo.lo_encrypt_key_size=keylength;//Im Fall von twofish 20
//:
Ersteinmal wollte ich fragen, ob dass nicht etwas gewagt ist, einfach 40 byte zu kopieren, die dann in 32-chars und 2 unsigned longs landet, immerhin muss ein unsigned long ja nicht 4 bytes lang sein (oder?).
Außerdem noch zum Hash. Es wird ja einmal das Passwort gehasht und dann das Passwort mit einem vorangestellten 'A' gehasht. Ist das nicht etwas unsicher? Es wird in diesem Fall zwar die Key-len auf 20 gesetzt, so das der zweite Hash nur für die inits sind, aber trotzdem! Könnte man die Keylenght nicht hochsetzen, oder wird es dadurch eher unsicherer?!
Und noch allgmeinen zu rmd160:
Es soll ein Hash sein, der ähnlich md4 ist und wie der Name schon sagt einen 160 bit (=20byte) Hash liefert. Leider habe ich nichts direkt zur Sicherheit gelesen, nur das der Hash "frei" ist.