Рубрики

Случайный против Безопасного Случайные числа в Java

Предварительное условие: Генерация случайных чисел в Java

Класс java.security.SecureRandom: Этот класс предоставляет криптографически сильный генератор случайных чисел (RNG). Криптографически сильное случайное число минимально соответствует тестам генератора статистических случайных чисел, указанным в FIPS 140-2, Требования безопасности для криптографических модулей , раздел 4.9.1. Кроме того, SecureRandom должен производить недетерминированный вывод. Поэтому любой начальный материал, передаваемый объекту SecureRandom, должен быть непредсказуемым, а все выходные последовательности SecureRandom должны быть криптографически стойкими.

java.util.Random class: классы, определенные в Random, не являются криптографически сильными, и выбранные числа не являются полностью случайными, потому что для их выбора используется определенный математический алгоритм (основанный на алгоритме вычитающего генератора случайных чисел Дональда Кнута). Поэтому использовать этот класс небезопасно для задач, требующих высокого уровня безопасности, таких как создание случайного пароля и т. Д.

Случайный против SecureRandom

  1. Размер: случайный класс имеет только 48 бит, тогда как SecureRandom может иметь до 128 бит. Так что шансы на повтор в SecureRandom меньше.
  2. Seed Generation: Random использует системные часы в качестве начального числа / или для создания начального числа. Таким образом, они могут быть легко воспроизведены, если злоумышленник знает время, когда было создано семя. Но SecureRandom берет случайные данные из вашей ОС (они могут быть интервалом между нажатиями клавиш и т. Д. — большинство ОС собирают эти данные и хранят их в файлах — / dev / random и / dev / urandom в случае linux / solaris) и используют их в качестве начального числа ,
  3. Нарушение кода: в случае случайных, требуется всего 2 ^ 48 попыток, с современными современными процессорами можно разбить его на практике. Но для безопасной случайности потребуется 2 ^ 128 попыток, которые потребуются годы и годы, чтобы безубыточно работать с современными современными машинами.
  4. Генерирующая функция: стандартная реализация Oracle JDK 7 использует так называемый линейный конгруэнтный генератор для генерации случайных значений в java.util.Random . В то время как Secure Random реализует алгоритм SHA1PRNG, который использует SHA1 для генерации псевдослучайных чисел. Алгоритм вычисляет хэш SHA-1 по истинному случайному числу (использует источник энтропии), а затем объединяет его с 64-битным счетчиком, который увеличивается на 1 при каждой операции.
  5. Безопасность: следовательно, java.util. Случайный класс не должен использоваться ни для критически важных приложений, ни для защиты конфиденциальных данных.

Генерация случайного числа с использованием java.util.Random;

// Java-программа для демонстрации
// генерация случайных чисел
// используя java.util.Random;

import java.util.Random;

  

public class generateRandom

{

  

    public static void main(String args[])

    {

        // создаем экземпляр класса Random

        Random rand = new Random();

  

        // Генерируем случайные целые числа в диапазоне от 0 до 999

        int rand_int1 = rand.nextInt(1000);

        int rand_int2 = rand.nextInt(1000);

  

        // Вывести случайные целые числа

        System.out.println("Random Integers: " + rand_int1);

        System.out.println("Random Integers: " + rand_int2);

    }

}

Выход:

Random Integers: 956
Random Integers: 678

Генерация случайного числа с использованием java.security.SecureRandom;

// Java-программа для демонстрации безопасности
// генерация случайных чисел
// используя java.security.SecureRandom

import java.security.SecureRandom;

  

public class generateRandom

{

  

    public static void main(String args[])

    {

        // создаем экземпляр класса SecureRandom

        SecureRandom rand = new SecureRandom();

  

        // Генерируем случайные целые числа в диапазоне от 0 до 999

        int rand_int1 = rand.nextInt(1000);

        int rand_int2 = rand.nextInt(1000);

  

        // Вывести случайные целые числа

        System.out.println("Random Integers: " + rand_int1);

        System.out.println("Random Integers: " + rand_int2);

    }

}

Выход:

Random Integers: 817
Random Integers: 500

Эта статья предоставлена Сакет Кумар . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Случайный против Безопасного Случайные числа в Java

0.00 (0%) 0 votes