<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/dscheg/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя dscheg]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 05 May 2026 01:49:07 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Неслучайная случайность, или Атака на ГПСЧ в .NET]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/skbkontur/articles/347758/</guid>
      <link>https://habr.com/ru/companies/skbkontur/articles/347758/?utm_campaign=347758&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<blockquote><em>Random numbers should not be generated with a method chosen at random.</em><br>
<em>— Donald Knuth</em></blockquote><br>
<p>Копаясь как-то в исходниках одного сервиса в поисках уязвимостей, я наткнулся на генерацию одноразового кода для аутентификации через SMS. Обработчик запросов на отправку кода упрощённо выглядел так:</p><br>
<pre><code class="cs">class AuthenticateByPhoneHandler
{
    /* ... */

    static string GenerateCode() =&gt; rnd.Next(100000, 1000000).ToString();

    readonly static Random rnd = new Random();
}</code></pre><br>
<p>Проблема видна невооруженным глазом: для генерации 6-тизначного кода используется класс Random — простой некриптографический генератор псевдослучайных чисел (ГПСЧ). Займёмся им вплотную: научимся предсказывать последовательность случайных чисел и прикинем возможный сценарий атаки на сервис.</p><br>
<h1 id="potokobezopasnost">Потокобезопасность</h1><br>
<p>Кстати, заметим, что в приведённом фрагменте кода доступ к статическому экземпляру <code>rnd</code> класса Random из нескольких потоков не синхронизирован. Это может привести к неприятному казусу, который можно часто встретить в вопросах и ответах на StackOverflow:</p><br>
<p><img src="https://habrastorage.org/webt/jw/fd/gv/jwfdgvotcjwt1wct-mz93tdkhnq.png"></p> <a href="https://habr.com/ru/articles/347758/?utm_campaign=347758&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Tue, 30 Jan 2018 04:00:01 GMT</pubDate>
      <dc:creator><![CDATA[dscheg (Контур)]]></dc:creator>
      <category><![CDATA[Блог компании Контур]]></category><category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Информационная безопасность]]></category><category><![CDATA[Криптография]]></category>
      <category><![CDATA[.NET]]></category><category><![CDATA[random]]></category><category><![CDATA[ГПСЧ]]></category><category><![CDATA[PRNG]]></category><category><![CDATA[мамаяпохакала]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
