The OpenNET Project / Index page

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



"Random и Zeromemory"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Random и Zeromemory"  +/
Сообщение от kapibara (ok), 13-Мрт-21, 01:06 
Как реализовать следующие криптографические функции в юникс: генерация случайных данных (да, знаю что истинно случайных данных нет, но все же) и secure_zero_memory, т.е. гарантированная очистка данных в памяти? Может есть какие-то готовые либы, примеры етц.
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Random и Zeromemory"  +/
Сообщение от Аноним (1), 13-Мрт-21, 01:40 
> (да, знаю что истинно случайных данных нет, но все же) и

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

4. "Random и Zeromemory"  +/
Сообщение от Kapibara (?), 14-Мрт-21, 01:12 
Спасибо, вроде то что надо.

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

> secure_zero_memory

man explicit_bzero

Ответить | Правка | Наверх | Cообщить модератору

6. "Random и Zeromemory"  +/
Сообщение от Аноним (-), 14-Мрт-21, 18:00 
> Чего хочу - ну смотри, есть у меня РНР , там могу
> вызвать 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

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

Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

7. "Random и Zeromemory"  +/
Сообщение от Kapibara (?), 15-Мрт-21, 00:27 
Спасибо робяты, все разобрался
Ответить | Правка | Наверх | Cообщить модератору

8. "Random и Zeromemory"  +/
Сообщение от Аноним (8), 28-Июн-23, 08:54 
Статистическое исследование энтропии из контрольных сум: https://www.opennet.ru/openforum/vsluhforumID10/5638.html
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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