Archeologia 2

Widzę, że moje pytanie nie spotkało się ze szczególnym zainteresowaniem. Krzysiek słusznie stwierdził, że jeśli atakujący kontroluje IV, wówczas modyfikacja byłaby możliwa. Ale czy to jest możliwe w tym konkretnym przypadku?

Możliwe jest, ale bardzo mało prawdopodobne. Dlaczego? Dlatego, że zarówno (ostateczny) klucz szyfrowania, jak i IV są generowane na podstawie klucza użytkownika oraz losowego salt. Jest to robione mniej więcej (a nawet dokładnie) tak:

    sub _salted_key_and_iv {
      my $self = shift;
      my ($pass,$salt)  = @_;
    
      croak "Salt must be 8 bytes long" unless length $salt == 8;
    
      my $key_len = $self->{keysize};
      my $iv_len  = $self->{blocksize};
    
      my $desired_len = $key_len+$iv_len;
    
      my $data  = '';
      my $d = '';
    
      while (length $data < $desired_len) {
        $d = md5($d . $pass . $salt);
        $data .= $d;
      }
      return (substr($data,0,$key_len),substr($data,$key_len,$iv_len));
    }

Szansa na to, że ktoś będzie w stanie manipulować wynikowym IV bez modyfikacji (wynikowego) klucza jest bardzo “przyzerowa”.

Oryginał tego wpisu dostępny jest pod adresem Archeologia 2

Autor: Paweł Goleń