The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Random и Zeromemory, !*! kapibara, 13-Мрт-21, 01:06  [смотреть все]
Как реализовать следующие криптографические функции в юникс: генерация случайных данных (да, знаю что истинно случайных данных нет, но все же) и secure_zero_memory, т.е. гарантированная очистка данных в памяти? Может есть какие-то готовые либы, примеры етц.
  • Random и Zeromemory, !*! Аноним, 01:40 , 13-Мрт-21 (1)
    > (да, знаю что истинно случайных данных нет, но все же) и

    https://www.chronox.de/jent/doc/CPU-Jitter-NPTRNG.html

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

    • Random и Zeromemory, !*! Kapibara, 15:48 , 13-Мрт-21 (2)
      > По поводу очистки памяти специалисты подскажут, но со своей стороны могу посоветовать
      > писать программы, а не реализации библиотечных функций.

      Так я не против взять готовое, но какое? Где в линукс есть вышеупомянутые функции. Нашел только что-то про чтение с /dev/random

  • Random и Zeromemory, !*! Аноним, 21:12 , 13-Мрт-21 (3)
    > Как реализовать следующие криптографические функции в юникс: генерация случайных данных

    Нипанятна чиво хочиш. Вот абавсем:

    https://wiki.openssl.org/index.php/Random_Numbers

    • Random и Zeromemory, !*! Kapibara, 01:12 , 14-Мрт-21 (4)
      Спасибо, вроде то что надо.

      Чего хочу - ну смотри, есть у меня РНР , там могу вызвать Random_bytes , srand и т.д.
      Есть C# на Windows, там свои классы для криптографии (и вынь апи) А как сделать на линукс, на С++ не знаю.

      • Random и Zeromemory, !*! Аноним, 16:25 , 14-Мрт-21 (5)
        > у меня РНР , там могу вызвать Random_bytes , srand и т.д.

        Чувак, набери man srand и удивись.

        > secure_zero_memory

        man explicit_bzero

      • Random и Zeromemory, !*! Аноним, 18:00 , 14-Мрт-21 (6)
        > Чего хочу - ну смотри, есть у меня РНР , там могу
        > вызвать Random_bytes , srand и т.д.

        вот тибе похапешный рандом (одоптировано под компеляцию теста)

        ```
        #include <assert.h>
        #include <stdio.h>
        #include <errno.h>
        #include <unistd.h>
        #include <fcntl.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <sys/syscall.h>

        #define SUCCESS 1
        #define FAILURE 0

        int php_random_bytes(void *bytes, size_t size) {
          size_t read_bytes = 0;
          ssize_t n;
          /* Linux getrandom(2) syscall or FreeBSD getrandom(2) function*/
          /* Keep reading until we get enough entropy */
          while (read_bytes < size) {
          /* Below, (bytes + read_bytes)  is pointer arithmetic.

               bytes   read_bytes  size
                 |      |           |
                [#######=============] (we're going to write over the = region)
                         \\\\\\\\\\\\\
                          amount_to_read
          */

          size_t amount_to_read = size - read_bytes;
          n = syscall(SYS_getrandom, bytes + read_bytes, amount_to_read, 0);

          if (n == -1) {
            if (errno == ENOSYS) {
              /* This can happen if PHP was compiled against a newer kernel where getrandom()
               * is available, but then runs on an older kernel without getrandom(). If this
               * happens we simply fall back to reading from /dev/urandom. */
              assert(read_bytes == 0);
              break;
            } else if (errno == EINTR || errno == EAGAIN) {
              /* Try again */
              continue;
            } else {
                /* If the syscall fails, fall back to reading from /dev/urandom */
              break;
            }
          }

            read_bytes += (size_t) n;
          }

          if (read_bytes < size) {
            int    fd;
            struct stat st;

          if (fd < 0) {

        #if HAVE_DEV_URANDOM
          fd = open("/dev/urandom", O_RDONLY);
        #else
          fd = open("/dev/random", O_RDONLY);
        #endif
            if (fd < 0) {
              return FAILURE;
            }
            /* Does the file exist and is it a character device? */
            if (fstat(fd, &st) != 0 ||
        # ifdef S_ISNAM
                !(S_ISNAM(st.st_mode) || S_ISCHR(st.st_mode))
        # else
                !S_ISCHR(st.st_mode)
        # endif
              ) {
                close(fd);
                return FAILURE;
              }
            }

            for (read_bytes = 0; read_bytes < size; read_bytes += (size_t) n) {
              n = read(fd, bytes + read_bytes, size - read_bytes);
              if (n <= 0) {
                break;
              }
            }

            if (read_bytes < size) {
              return FAILURE;
            }
          }

          return SUCCESS;
        }

        int main(void) {
          char data[129];
          php_random_bytes(&data, 128);

          return 0;
        }
        ```

        gcc pohape-random.c -o pohapernd

        Имино из тваиго похапе, нафига оно тибе ?

  • Random и Zeromemory, !*! Аноним, 08:54 , 28-Июн-23 (8)
    Статистическое исследование энтропии из контрольных сум: https://www.opennet.ru/openforum/vsluhforumID10/5638.html



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру