информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / theory
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Загадочные вещи с Intel® 82802 FWH. 26.05.03 23:25  Число просмотров: 3036
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 26.05.03 23:49  Количество правок: 1
<"чистая" ссылка>
Итак, имеем subj. Программа получает аппаратно сгенерированные случайные числа и печатает их на консоль, причём в последней колонке выводит «сумму» битов по текущему ряду. Как известно, в хорошем генераторе эта «сумма» должна «плавать» около нуля. («Сумма» считается так — если 1 то увеличиваем счётчик, если 0 — уменьшаем.)
Она плавает, и всё вроде бы хорошо, но только «сумма» получается всегда чётная ;-) У кого-нибудь есть какие-нибудь объяснения? Ухудшает ли этот факт криптостойкость, если, к примеру, шифровать текст наложением полученной гаммы?
Насколько я понимаю, абсолютно случайная гамма не подчиняется никаким законам, кроме одного — при достаточно большой выборке количество нулей и количество единиц в гамме приблизительно равно.

Заранее всем спасибо. Код программы ниже.

Program Rng;
Uses Strings;

Type PBYTE = ^Byte;

Const 
  RNG_STATUS_REG: PBYTE = Pointer($FFBC015F);
  RNG_DATASTATUS_REG: PBYTE = Pointer($FFBC0160);
  RNG_DATA_REG: PBYTE = Pointer($FFBC0161);

  Function IsRngPresent: Boolean;
  Const RNG_PRESENT_MASK = 1 shl 6;
  Begin
    Result := RNG_STATUS_REG^ And RNG_PRESENT_MASK = RNG_PRESENT_MASK;
  End;

  Procedure InitRng;
  Const RNG_ENABLED_BIT = 1;
  Begin
    RNG_STATUS_REG^ := RNG_STATUS_REG^ Or RNG_ENABLED_BIT;
  End;

  Function GetRndNum: DWORD;
  Type 
    OutBuff = Packed Array[1..4] Of Byte;
    pOutBuff = ^OutBuff;
  Var J: Integer;
  Begin
    For J := 1 to 4 Do
    Begin
      While RNG_DATASTATUS_REG^ and 1 <> 1 Do ;
      pOutBuff(@Result)^[J] := RNG_DATA_REG^;
    End;
  End;
  
  Function CalcSum(aValue: DWORD): Integer;
  Var 
    J: Integer;
    TestMask: DWORD;
  Begin
    Result := 0;
    For J := 0 To 31 Do
    Begin
      TestMask := 1 shl J;
      If aValue And TestMask = TestMask Then Inc(Result)
      Else Dec(Result);
    End;
  End;

Var 
  OutBuff: Array[1..5] Of DWORD;  
  BitSum, J: Integer;
  
begin
  WriteLn; WriteLn('True random number generator written by HandleX');
  WriteLn('It works with 82802 Intel(R) Firmware Hub (810 or higher chipsets) only');
  
  If IsRngPresent Then 
  Begin
    InitRng; 
    WriteLn('Random number generator is found and initialized.');
    WriteLn('First random number is generated: $', hex(GetRndNum));
    Write('Press Enter to generate RND numbers to console...');
    ReadLn;
    WriteLn;
  End 
  Else Begin
    WriteLn('Error: random number generator is NOT present on this computer!');
    WriteLn;
    Exit;
  End;

  BitSum := 0;

  Repeat 
    For J := 1 to 5 Do
    Begin
      OutBuff[J] := GetRndNum;
      If J <> 5 Then Write('$', Hex(OutBuff[J]), '    ')
      Else Write('$', Hex(OutBuff[J]), '    Sum: ');
      BitSum := BitSum + CalcSum(OutBuff[J]); 
    End;
    
    WriteLn(BitSum); 
  Until False;
end.

---

Откомпилированная прога.
<theory> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach