2016-08-30 3 views
3

Довольно близко к уже задавал XOR Encryption in Java: losing data after decryption:Каковы недостатки операции XOR с SecureRandom потокового

XORing с потоковым производимым посеяно SecureRandom выглядит просто и быстро, например:

byte[] data = <data to encrypt> 
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 
random.setSeed("myPassword".getBytes(Charset.forName("UTF-8"))); 
byte[] mask = new byte[1]; 
for(int ii = 0; ii < len; ii++) { 
    sr.nextBytes(mask); 
    data[ii] = (byte)(0xFF & (data[ii]^mask[0])); 
} 

В таком подходе в не наиболее часто используемое симметричное шифрование, каковы его проблемы?

+0

Это реализует [одноразовый блокнот] (https://en.wikipedia.org/wiki/One-time_pad), который нацелен на то, что криптоанализ будет невозможным. Если выполняются следующие ограничения. 1) ключ имеет одинаковую длину (количество генерируемых случайных байтов) в качестве входного сообщения. 2) вы никогда не будете использовать тот же ключ еще раз (означает, что сгенерированные случайные байты никогда не находятся в одном порядке). В вашем примере вы никогда не должны использовать один и тот же массив байтов для 'setSeed()'. Для exmplanation, почему это спасение, посмотрите на [Попытка криптоанализа] (https://en.wikipedia.org/wiki/One-time_pad#Attempt_at_cryptanalysis). – SubOptimal

ответ

1

несколько вопросов, но главный вопрос заключается в том, что если у вас есть только псевдо -randomness, то у вас есть псевдо -Security. С другой стороны, истинный случайный случай не выдавал бы одни и те же байты на основе семени, поэтому вам нужно было бы поддерживать целую кисточку.

Не позволяйте SecureRandom обмануть вас в этом примере. Атаковать алгоритм SHA1PRNG намного проще, чем атаковать реальное шифрование, такое как AES.

+0

Спасибо. Если я могу задать несколько вопросов относительно вашего объяснения: , конечно, псевдослучайность убивает идею одноразовой прокладки. Тем не менее, поток дополнений по-прежнему полностью основан на предоставленном семенном и случайном распределении, поэтому сообщение xor'ed также будет распределено случайным образом, не так ли? Пэд можно воспроизвести, только если у злоумышленника есть оригинальные и зашифрованные сообщения - может ли другая, лучшая псевдослучайная реализация secureRandom решить эту проблему? – JabberW

+0

Не совсем, хотя хороший источник случайности необходим, этого недостаточно. Вот как работает потоковый шифр, поэтому, если вы используете 'AES' в режиме CTR, вы будете обрабатывать данные с помощью' AES', являющегося «securerandom». Однако такие проблемы, как повторное использование ключей и целостность сообщений, делают теоретически хорошую идею менее полезной на практике. – Kayaman

+0

[Здесь] (http://crypto.stackexchange.com/questions/10422/why-not-the-one-time-pad-with-pseudo-number-generator), вы не первый, кто задается вопросом о что (и вы не станете последним). – Kayaman

Смежные вопросы