----- Ursprüngliche Mail -----
> Von: "Gedare Bloom" <ged...@rtems.org>
> An: "Christian Mauderer" <christian.maude...@embedded-brains.de>
> CC: devel@rtems.org
> Gesendet: Freitag, 10. November 2017 16:55:33
> Betreff: Re: [PATCH 2/4] getentropy: Add cpu counter based implementation.

>> diff --git a/c/src/lib/libbsp/shared/getentropy-cpucounter-based.c
>> b/c/src/lib/libbsp/shared/getentropy-cpucounter-based.c
>> new file mode 100644
>> index 0000000000..137fdfbb6c
>> --- /dev/null
>> +++ b/c/src/lib/libbsp/shared/getentropy-cpucounter-based.c
>> @@ -0,0 +1,46 @@
>> +/*
>> + * Copyright (c) 2017 embedded brains GmbH.  All rights reserved.
>> + *
>> + *  embedded brains GmbH
>> + *  Dornierstr. 4
>> + *  82178 Puchheim
>> + *  Germany
>> + *  <rt...@embedded-brains.de>
>> + *
>> + * The license and distribution terms for this file may be
>> + * found in the file LICENSE in this distribution or at
>> + * http://www.rtems.org/license/LICENSE.
>> + */
>> +
>> +#include <unistd.h>
>> +#include <string.h>
>> +#include <rtems/sysinit.h>
>> +#include <rtems/counter.h>
>> +
>> +int getentropy(void *ptr, size_t n)
>> +{
>> +       uint8_t *dest = ptr;
>> +
>> +       while (n > 0) {
>> +               rtems_counter_ticks ticks;
>> +
>> +               ticks = rtems_counter_read();
>> +
>> +               if (n >= sizeof(ticks)) {
>> +                       memcpy(dest, &ticks, sizeof(ticks));
>> +                       n -= sizeof(ticks);
>> +                       dest += sizeof(ticks);
>> +               } else {
>> +                       /*
>> +                        * Fill the remaining bytes with only the least
>> +                        * significant byte of the time. That is the byte 
>> with
>> +                        * the most changes.
>> +                        */
>> +                       *dest = ticks & 0xFF;
>> +                       --n;
>> +                       ++dest;
>> +               }
>> +       }
>> +
>> +       return 0;
>> +}
> 
> I don't believe this is a good source of entropy--the passage of time
> is not random. Should this be documented as such?

Hello Gedare,

I agree that the uptime (or similar things like the CPU counter) isn't a good 
entropy source. The only thing that makes it random are interrupts from 
external sources. But that is a general problem for embedded systems: There is 
no universal entropy source. On desktops a user input is a quite good source 
but we don't have anything like that.

The implementation is intended to be some kind of fallback replacement for the 
the even worse one in libbsd: There the source has just filled everything with 
zero values. My intention was to make it simpler to integrate true entropy 
sources like the atsam TRNG (see patch 4).

Documenting that would be a good idea. Any suggestion where?

The simplest solution might could be to rename the file to something like 
getentropy-pseudo-uptime-based.c. But that would mean that it would still be 
only visible to BSP developers. Another possibility would be to print a message 
the first time this function is called that warns the user that only a bad 
random source is available. But that would clutter the output of currently any 
BSP but the atsam when someone uses arc4random (for example libbsd).

Regards

Christian
-- 
--------------------------------------------
embedded brains GmbH
Christian Mauderer
Dornierstr. 4
D-82178 Puchheim
Germany
email: christian.maude...@embedded-brains.de
Phone: +49-89-18 94 741 - 18
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to