Back

ⓘ /dev/random




                                     

ⓘ /dev/random

У Јуникс оперативним системима /dev/random, /dev/urandom и /dev/arandom су посебне датотеке које служе као генератор псеудо-насумичних бројева. Ове команде омогућавају приступ шумовима у програмском окружењу из управљачког програма и из других извора. /dev/random обично заблокира ако има мање доступне ентропије од тражене; /dev/urandom никада не заблокира, чак и ако семе генератора псеудонасумичних бројева није у потпуности иницијализовано ентропијом од бутовања система. /dev/arandom заблокира након подизања све док се семе генератора псеудо-насумичних бројева не иницијализује безбедно са довољно ентропије, а затим никада не заблокира поново. Не имплементирају сви оперативни системи исте методе за /dev/ random и /dev/urandom, а само неколико поседује /dev/arandom.

                                     

1. Линукс

Генерисање насумичних бројева у простору кернела је први пут имплементирано у Линуксу 1994, од стране Теодора Цоа. Имплементација се врши сигурним хашевима уместо шифрама, како би се избегла ограничења извоза криптографије која је била у функцији када је генератор првобитно пројектован. Имплементација је осмишљена са претпоставком да ће хеш бити слаб или шифра бити слаба, тако да је дизајн поуздан узевши у обзир слабости. Брзи опоравак од компромиса основе се не сматра захтевом, јер су захтеви за компромисом основе довољни за много лакше и директније нападе на са тим неповезане делове оперативног система.

У Цоовој имплементацији, генератор чува процену броја битова шума у заједничкој бази ентропије. Из ове заједничке базе ентропије креирају се случајни бројеви. Када се учита, уређај који је послужио као извор за /dev/random ће враћати само случајне бајтове унутар процењеног броја битова шумова у заједничкој бази ентропије. Када је заједничка база ентропије празна, учитавања из /dev/random ће заблокирати док се не сакупи додатни шум из околине. Намера је да служи као криптографски сигуран генератор псеудонасумичних бројева, испоручујући излаз са што је могуће већом ентропијом. Аутори су предложили ово за употребу у генерисању криптографских кључева за високу или дугорочну заштиту.

Насупрот команде /dev/random је /dev/urandom "неограничен”/насумични извор који не блокира који користи интерну заједничку основу како би произвео више псеудонасумичних битова. То значи да позив неће бити блокиран, али излаз може садржати мање ентропије од одговарајућег читања из команде /dev/random. Док је команда /dev/ urandom и даље замишљена као генератор псеудонасумичних бројева који су погодни за већину криптографских примена, аутори одговарајућих упутстава примећују да, у теорији, може постојати неки још увек необјављени напад на алгоритам који користи /dev/urandom и да корисници који брину због таквог напада треба да користе /dev/random. Међутим, мало је вероватно да ће до таквог напада доћи, јер када једном заједничка основа ентропије постане непредвидљива не умањује се сигурност услед смањеног броја битова.

Такође је могуће писати у /dev/random. Ово дозвољава сваком кориснику да меша насумичне податке у заједничку основу. Неслучајни подаци су безопасни, јер само привилеговани корисник може издати ioctl потребан за повећање процењене ентропије. Тренутна количина ентропије и величина ентропијске основе Линукс кернела, мерене у битовима, су доступни у /proc/sys/kernel/random/ и могу се приказати командом cat /proc/sys/kernel/random/entropy_avail и cat /proc/sys/kernel/random/poolsizе, респективно.

Гутерман, Пинкас и Реинман су у марту 2006. објавили детаљну криптографску анализу генератора случајних бројева Линуксовог генератора насумичних бројева у којој су описали неколико слабости. Можда је најозбиљнији проблем који пријављују са уграђеним или Лајв ЦД системима, као што су рутери и клијенти без диска, за које је стање при покретању система предвидљиво и доступна количина ентропије из окружења може бити ограничена. За систем са непроменљивом меморијом, они препоручују уштеду неког стања из RNG-а при гашењу тако да се може укључити у RNG стање на следећем рестартовању. У случају рутера за који мрежни саобраћај представља примарни расположиви извор ентропије, они примећују да би уштеда стања преко поновног покретања система "захтевала од потенцијалних нападача да прислушкују сав мрежни саобраћај" од тренутка када је рутер први пут пуштен у рад, или да обезбеди директан приступ интерном стању рутера. Овај проблем је, како је забележено, посебно критичан у случају бежичног рутера чији се мрежни саобраћај може ухватити из даљине и који можда користи RNG за генерисање кључева за енкрипцију података.

Линуксов кернел пружа подршку за неколико хардверских генератора насумичних бројева, под условом да су инсталирани. Необрађени излаз из таквог уређаја се може добити путем /dev/hwrng.

Са Линукс кернелом верзије 3.16 и новијим, сам кернел меша податке из хардверских генератора насумичних бројева у /dev/random, a клизачем је могуће одредити размер дефинисане процене вредности ентропије HWRNG-a. То значи да није потребан помоћни програм који се активира у радном окружењу, попут rngd из rng-tools, за тај задатак. Са Линукс кернелом верзије 3.17+, VirtIO RNG је модификован како би имао подразумеване дефинисане вредности изнад 0, и као такав, је тренутно једини HWRNG који је подразумевано комбинован у /dev/random.

Скуп ентропија може се побољшати програмима као што су timer_entropyd, haveged, randomsound итд. Са rng-tools, хардверски генератори случајних бројева као што је Entropy Key, итд. могу писати у /dev/random. Програми dieharder, diehard и ent могу тестирати ове генераторе случајних бројева.

У јануару 2014, Данијел Ј. Бернштајн је објавио критику о томе како Линукс комбинује различите изворе ентропије. Он наглашава да напад на један од извора ентропије који је способан да врши надзор других извора ентропије може променити свој излазни сигнал како би поништио насумичност осталих извора ентропије. Ако узмемо функцију Hx,y,z где је H функција хеша, а параметри x, y, и z су извори ентропије где је z излазни сигнал малициозног HRNG Z-a који је везан за процесор:

  • Z израчунава Hx,y,r.
  • Z генерише насумичну вредност за r.
  • У супротном, почети од почетка, почевши од 1.
  • Ако је излазна вредност Hx,y,r једнака жељеној вредности, излазна вредност r је z.

Бернштајн је проценио да нападач мора да понови Hx,y,r 16 пута како би компромитовао DSA и ECDSA. Ово је могуће зато што Линукс врши поновно постављање H на трајној основи уместо да користи једно семе високог квалитета.

Октобра 2016. је са објављивањем Линукс кернела верзије 4.8 и новије, /dev/urandom пребачен на имплементацију базирану на Теодор Цоовом ЧаЧа20 ChaCha20, који се заснива на Бернштајновом добро оцењеном низу шифри ЧаЧа20 ChaCha20.

                                     
  • on the mental health and suicidality of lesbian, gay, and bisexual youth. Dev Psychol. 1995 31: 65 74. Lewinsohn PM, Rohde P, Seeley JR. Adolescent suicidal
  • Splash 1993. - 294. Weezer Weezer The Blue Album 1994. 299. 295. Daft Punk Random Access Memories 2013. - 296. Нил Јанг и Crazy Horse Rust Never Sleeps 1979

Users also searched:

...