информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаПортрет посетителяГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / theory
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Загадочные вещи с Intel® 82802 FWH. 26.05.03 23:25  
Автор: 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.

---

Откомпилированная прога.
логично 28.05.03 21:00  
Автор: RElf <M> Статус: Member
<"чистая" ссылка>
> Итак, имеем subj. Программа получает аппаратно
> сгенерированные случайные числа и печатает их на консоль,
> причём в последней колонке выводит «сумму» битов по
> текущему ряду. Как известно, в хорошем генераторе эта
> «сумма» должна «плавать» около нуля. («Сумма» считается так
> — если 1 то увеличиваем счётчик, если 0 — уменьшаем.)
> Она плавает, и всё вроде бы хорошо, но только «сумма»
> получается всегда чётная ;-) У кого-нибудь есть
> какие-нибудь объяснения?

Дык простейшая арифметика. Пусть в 2k-битном числе x единичных битов и, соответственно, 2k-x нулевых. Тогда "сумма" равна
x - (2k-x) = 2x-2k,
что есть четное число.
Неверно. Количество битов может быть и нечётным. 29.05.03 08:46  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 29.05.03 08:50  Количество правок: 1
<"чистая" ссылка>
Сумма битов считается по пяти 32-битным числам. Вот к примеру 5 чисел:

0xFFFFFFFFh
0xFFFFFFFFh
0xFFFFFFFFh
0xFFFFFFFFh
0xFFFFFFFEh

Сумма единичных битов = 32 * 5 - 1, а нулевых = 1.
Ситуация маловероятная из мира случайных чисел, но возможная.
я настаиваю 29.05.03 09:02  
Автор: RElf <M> Статус: Member
Отредактировано 29.05.03 09:04  Количество правок: 1
<"чистая" ссылка>
> Сумма битов считается по пяти 32-битным числам. Вот к
> примеру 5 чисел:
>
> 0xFFFFFFFFh
> 0xFFFFFFFFh
> 0xFFFFFFFFh
> 0xFFFFFFFFh
> 0xFFFFFFFEh
>
> Сумма единичных битов = 32 * 5 - 1, а нулевых = 1.

Напомню Ваши же слова:

> «Сумма» считается так — если 1 то увеличиваем счётчик, если 0 — уменьшаем.

Соответственно, если мы из количества единичных битов вычтем количество нулевых, то получим четное число. В данном случае 32 * 5 - 2.
А, всё понял. Прошу извинить за невнимательность. Соответственно получается что Intel, как всегда, рулез :-) 30.05.03 10:31  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Не ужели Интел закладку в этот генератор не вставил?! Чем он хуже Микрософта!? Не будем плохо думать об американцах. 30.05.03 10:50  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
<"чистая" ссылка>
Поэтому "умные" программы никогда не завязываются на один генератор 30.05.03 19:29  
Автор: RElf <M> Статус: Member
<"чистая" ссылка>
Интеловский генератор хорош, но только в совокупности с другими источниками случайности (rtdsc, софтварные генераторы, нажатия клавиш, движение мыши и т.п.) Все это сбивается в единую кучу с помощью приличной хеш-функции, и уже потом используется по назначению.
Было бы глупо использовать только Intel'овский генератор в чистом виде, потому как неизвестна его подноготная. Это может быть, например, "хитрый" софтвартный генератор с узвестной "кому надо" формулой и т.п...
А это сложно, опасно, да и «закладка» может не сработать. 30.05.03 14:40  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 30.05.03 14:43  Количество правок: 1
<"чистая" ссылка>
Начнём с того, что сама железяка генерит 8-битные числа. А часто требуется 32- или 64-битное, и как ты будешь его «укладывать» это чисто от тебя зависит. Можно использовать какое-нибудь «перемежение» получаемых чисел в зависимости от этих чисел, да всё что угодно. Но я не верю. По нижеизложенным причинам.
1) «закладка» это значит хитрый алгоритм, а этот девайс имеет генератор просто как дополнительную «фичу» к eeprom, которая есть основная фишка этого устройства — 128 или 512 килобайт (зависит от модификации). Само слово «Firmware hub» в названии девайса говорит о том, что это просто хранилище eeprom.
2) Сама микросхемка маленькая, не похоже что там может быть микроконтроллер чего-либо.
3) Репутация. Микросхему можно разрезать и проанализировать (486 процессор когда-то пиратски так «содрали», не то что этот девайс). А оно Intel надо?
4) Известный софт PGP может использовать этот девайс, и говорит, что это есть рулез ;-)

Кстати, расскажи мне про какую-нибудь закладку в продуктах Microsoft. Только не надо про подбор паролей Lanmanager — это вроде как не закладка ;-)
Ходють слухи периодически 30.05.03 16:12  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Кстати, расскажи мне про какую-нибудь закладку в продуктах
> Microsoft. Только не надо про подбор паролей Lanmanager —
> это вроде как не закладка ;-)
Один из которых я вспомнил, связанный с NSA_Key

Вообще то иховские программеры вообще лопухнулись, когда оставили непострипанные символы в релизе. А в частности символ NSA_Key наводил на мысли о том, что сертификаты проверяются не одним ключем, а двумя.

Щас вроде все уляглось, но шуму было довольно много

http://news.zdnet.co.uk/story/0
http://
http://s2073476
http://00.html
А это сложно, опасно, да и «закладка» может не сработать. 30.05.03 16:06  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Отредактировано 30.05.03 16:11  Количество правок: 1
<"чистая" ссылка>
> Начнём с того, что сама железяка генерит 8-битные числа. А
> часто требуется 32- или 64-битное, и как ты будешь его
> «укладывать» это чисто от тебя зависит. Можно использовать
> какое-нибудь «перемежение» получаемых чисел в зависимости
> от этих чисел, да всё что угодно. Но я не верю. По
> нижеизложенным причинам.

Предполагается, что исходники есть. Алгоритм «перемежения» есть. ВСЕ. Если микруха генерит ПСЧ умеренно длиной периодичности - перебор не такой уж и долгий получиться. А именно не порядка размера ключа, а длины периодичности. Особенно, если сноска 1) и 2) соответствует действительности.

> 1) «закладка» это значит хитрый алгоритм, а этот девайс
> имеет генератор просто как дополнительную «фичу» к eeprom,
> которая есть основная фишка этого устройства — 128 или 512
> килобайт (зависит от модификации). Само слово «Firmware
> hub» в названии девайса говорит о том, что это просто
> хранилище eeprom.
> 2) Сама микросхемка маленькая, не похоже что там может быть
> микроконтроллер чего-либо.
> 3) Репутация. Микросхему можно разрезать и проанализировать
> (486 процессор когда-то пиратски так «содрали», не то что
> этот девайс). А оно Intel надо?
> 4) Известный софт PGP может использовать этот девайс, и
> говорит, что это есть рулез ;-)

4) - Это ни чего не доказывает.

> Кстати, расскажи мне про какую-нибудь закладку в продуктах
> Microsoft. Только не надо про подбор паролей Lanmanager —
> это вроде как не закладка ;-)

1) Если не ошибаюсь, то при установленном протоколе НЕТБИОС можно очень много о машине узнать, вплоть до длины парлей юреров. Ди и слышал, что Микрософт тяготеет к симметричным алгоритмам, даже при шифровании паролей. (Здесь могу ошибаться, сам в исходниках не копался, все это со слов третьих людей, но не думаю, что это сплетни)

2) Если известная нам ломалка паролей перебирает их втупую, то не факт, что Микрософт не владеет значительно более быстрой ломалкой, использующей особенности алгоритма шифромания пароля, но мы об этом не догадываемся.

3) Если мы не знаем про закладки, то это не значит, что их нет, просто американцы умеют хранить секреты.
1




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


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