/dev/random, క్రిప్టోగ్రాఫికల్గా సురక్షితమైన సూడో-రాండమ్ నంబర్ జనరేటర్ (CSPRNG), ఒక బాధించే సమస్యను కలిగి ఉంది: నిరోధించడం. మీరు దాన్ని ఎలా పరిష్కరించవచ్చో ఈ కథనం వివరిస్తుంది.
గత కొన్ని నెలలుగా, కెర్నల్లోని యాదృచ్ఛిక సంఖ్యల ఉత్పత్తి సౌకర్యాలు కొద్దిగా పునర్నిర్మించబడ్డాయి, అయితే ఈ ఉపవ్యవస్థలో సమస్యలు విస్తృతంగా పరిష్కరించబడ్డాయి.
ఆండీ లుటోమిర్స్కీ డిసెంబర్ చివరిలో ప్యాచ్ యొక్క మూడవ సంస్కరణను ప్రచురించారు. అతను సహకరిస్తాడు "యాదృచ్ఛిక Linux APIలకు రెండు ప్రధాన అర్థ మార్పులు". ప్యాచ్ గెట్రాండమ్() సిస్టమ్ కాల్కు కొత్త GRND_INSECURE ఫ్లాగ్ను జోడిస్తుంది (అయితే లుటోమిర్స్కీ దీనిని getentropy()గా సూచిస్తారు, ఇది glibcలో స్థిర ఫ్లాగ్లతో getrandom()ని ఉపయోగించి అమలు చేయబడుతుంది); ఈ ఫ్లాగ్ అభ్యర్థించిన డేటా మొత్తాన్ని కాల్ ఎల్లప్పుడూ తిరిగి ఇచ్చేలా చేస్తుంది, కానీ డేటా యాదృచ్ఛికంగా ఉందని హామీ ఇవ్వకుండా. కెర్నల్ ఇచ్చిన సమయంలో అది కలిగి ఉన్న అత్యుత్తమ యాదృచ్ఛిక డేటాను ఉత్పత్తి చేయడానికి తన వంతు కృషి చేస్తుంది. "బహుశా దీన్ని 'అసురక్షిత' అని పిలవడం ఉత్తమమైన పని. (అసురక్షిత) ఈ APIని భద్రత అవసరమైన వాటి కోసం ఉపయోగించకుండా నిరోధించడానికి."
పాచెస్ నిరోధించే పూల్ను కూడా తొలగిస్తుంది. కెర్నల్ ప్రస్తుతం రెండు యాదృచ్ఛిక డేటా పూల్లను నిర్వహిస్తుంది, ఒకటి /dev/randomకి మరియు మరొకటి /dev/urandomకి, ఇందులో వివరించినట్లుగా
లాక్ పూల్ను తీసివేయడం అంటే /dev/random నుండి చదవడం అనేది సున్నాకి సెట్ చేయబడిన ఫ్లాగ్లతో getrandom() లాగా ప్రవర్తిస్తుంది (మరియు GRND_RANDOM ఫ్లాగ్ను నూప్గా మారుస్తుంది). క్రిప్టోగ్రాఫిక్ యాదృచ్ఛిక సంఖ్య జనరేటర్ (CRNG) ప్రారంభించబడిన తర్వాత, /dev/random నుండి చదవడం మరియు getrandom(...,0)కి కాల్లు నిరోధించబడవు మరియు అభ్యర్థించిన మొత్తం యాదృచ్ఛిక డేటాను అందిస్తుంది.
Lutomirsky చెప్పారు: “Linux బ్లాకింగ్ పూల్ వాడుకలో లేదని నేను నమ్ముతున్నాను. CRNG Linux అవుట్పుట్ని ఉత్పత్తి చేస్తుంది, అది కీ జనరేషన్కు కూడా ఉపయోగపడుతుంది. బ్లాకింగ్ పూల్ ఏ మెటీరియల్ కోణంలో బలంగా లేదు మరియు దానికి మద్దతు ఇవ్వడానికి సందేహాస్పదమైన విలువ కలిగిన చాలా మౌలిక సదుపాయాలు అవసరం.
ఇప్పటికే ఉన్న ప్రోగ్రామ్లు నిజంగా ప్రభావితం కాకూడదనే లక్ష్యంతో మార్పులు చేయబడ్డాయి మరియు వాస్తవానికి, GnuPG కీ ఉత్పత్తి వంటి వాటి కోసం ఎక్కువసేపు వేచి ఉండటంతో తక్కువ సమస్యలు ఉంటాయి.
“ఈ ఎపిసోడ్లు ఇప్పటికే ఉన్న ఏ ప్రోగ్రామ్లకు అంతరాయం కలిగించకూడదు. /dev/urandom మారదు. /dev/random ఇప్పటికీ బూట్ అయిన వెంటనే బ్లాక్ చేస్తుంది, కానీ ఇది మునుపటి కంటే తక్కువ బ్లాక్ చేస్తుంది. ఇప్పటికే ఉన్న ఫ్లాగ్లతో getentropy() మునుపటిలా ఆచరణాత్మక ప్రయోజనాల కోసం తగిన ఫలితాన్ని అందిస్తుంది."
కెర్నల్ "నిజమైన యాదృచ్ఛిక సంఖ్యలు" అని పిలవబడే వాటిని అందించాలా వద్దా అనేది ఇప్పటికీ బహిరంగ ప్రశ్న అని లుటోమిర్స్కీ పేర్కొన్నాడు, ఇది నిరోధించే కెర్నల్ కొంత మేరకు చేయవలసి ఉంది. అతను దీనికి ఒక కారణాన్ని మాత్రమే చూస్తున్నాడు: "ప్రభుత్వ ప్రమాణాలకు అనుగుణంగా ఉండటం." కెర్నల్ దీన్ని అందించాలంటే, అది పూర్తిగా భిన్నమైన ఇంటర్ఫేస్ ద్వారా చేయాలి లేదా వినియోగదారు స్పేస్లోకి తరలించబడాలని లుటోమిర్స్కీ సూచించాడు, అటువంటి లాక్ పూల్ను రూపొందించడానికి ఉపయోగించే ముడి ఈవెంట్ నమూనాలను తిరిగి పొందేందుకు వినియోగదారుని అనుమతిస్తుంది.
స్టీఫన్ ముల్లర్ తన సెట్ని సూచించాడు
మాథ్యూ గారెట్ "నిజమైన యాదృచ్ఛిక డేటా" అనే పదానికి అభ్యంతరం చెప్పాడు: "మేము ఇక్కడ క్వాంటం సంఘటనలను మాదిరి చేయడం లేదు."
"అంతర్లీన శబ్దం మూలం ఎంట్రోపీని ఉత్పత్తి చేసే అదే రేటుతో" ఫలితాన్ని మాత్రమే ఉత్పత్తి చేసే యాదృచ్ఛిక సంఖ్య జనరేటర్ను వివరించడానికి ఈ పదం జర్మన్ ప్రామాణిక AIS 31 నుండి వచ్చిందని ముల్లర్ ప్రతిస్పందించాడు.
పరిభాషలో తేడాలు పక్కన పెడితే, LRNG ప్యాచ్లు సూచించిన విధంగా లాక్ పూల్ కలిగి ఉండటం వలన వివిధ సమస్యలకు దారి తీస్తుంది, కనీసం ప్రత్యేక హక్కులు లేకుండా యాక్సెస్ చేసినట్లయితే.
లుటోమిర్స్కీ చెప్పినట్లుగా: "ఇది సమస్యను పరిష్కరించదు. ఇద్దరు వేర్వేరు వినియోగదారులు gnupg వంటి తెలివితక్కువ ప్రోగ్రామ్లను అమలు చేస్తే, వారు ఒకరినొకరు హరిస్తారు. /dev/randomతో ప్రస్తుతం రెండు ప్రధాన సమస్యలు ఉన్నాయని నేను చూస్తున్నాను: ఇది DoSకి (అంటే వనరు క్షీణత, హానికరమైన ప్రభావం లేదా ఇలాంటిదే) అవకాశం ఉంది మరియు దానిని ఉపయోగించడానికి ఎటువంటి అధికారాలు అవసరం లేదు కాబట్టి, ఇది దుర్వినియోగానికి కూడా అవకాశం ఉంది. Gnupg తప్పు, ఇది పూర్తిగా కుప్పకూలింది. మేము gnupg మరియు సారూప్య ప్రోగ్రామ్లను ఉపయోగించే కొత్త అన్ప్రివిలేజ్డ్ ఇంటర్ఫేస్ను జోడిస్తే, మేము మళ్లీ కోల్పోతాము."
గెట్రాండమ్() జోడింపు ఇప్పుడు GnuPGని ఈ ఇంటర్ఫేస్ని ఉపయోగించడానికి అనుమతిస్తుంది, ఎందుకంటే ఇది పూల్ ప్రారంభించబడిందని అవసరమైన హామీని అందిస్తుంది. GnuPG డెవలపర్ వెర్నర్ కోచ్తో జరిపిన చర్చల ఆధారంగా, GnuPG ప్రస్తుతం నేరుగా /dev/random నుండి చదవడానికి గ్యారెంటీ మాత్రమే కారణమని ముల్లెర్ అభిప్రాయపడ్డాడు. కానీ సేవ యొక్క తిరస్కరణకు గురయ్యే ప్రత్యేకించబడని ఇంటర్ఫేస్ ఉంటే (ఈ రోజు /dev/random వలె), కొన్ని అప్లికేషన్ల ద్వారా అది దుర్వినియోగం అవుతుందని లుటోమిర్స్కీ వాదించారు.
Linux యొక్క రాండమ్ నంబర్ సబ్సిస్టమ్ డెవలపర్ అయిన థియోడర్ యుయే తక్ త్సో, బ్లాకింగ్ పూల్ అవసరం గురించి తన మనసు మార్చుకున్నట్లు కనిపిస్తోంది. ఈ పూల్ను తీసివేయడం వలన Linux నిజమైన రాండమ్ నంబర్ జనరేటర్ (TRNG) అనే ఆలోచన నుండి ప్రభావవంతంగా బయటపడుతుందని అతను చెప్పాడు: "ఇది అర్ధంలేనిది కాదు, ఎందుకంటే ఇది *BSD ఎల్లప్పుడూ చేసేది."
TRNG మెకానిజంను అందించడం అనేది అప్లికేషన్ డెవలపర్లకు ఒక ఎరగా పని చేస్తుందని మరియు వాస్తవానికి, Linuxచే మద్దతిచ్చే వివిధ రకాల హార్డ్వేర్లను బట్టి, కెర్నల్లో TRNGకి హామీ ఇవ్వడం అసాధ్యమని కూడా అతను ఆందోళన చెందాడు. రూట్ అధికారాలతో మాత్రమే పరికరాలతో పని చేసే సామర్థ్యం కూడా సమస్యను పరిష్కరించదు: "అప్లికేషన్ డెవలపర్లు తమ అప్లికేషన్ను భద్రతా ప్రయోజనాల కోసం రూట్గా ఇన్స్టాల్ చేయాలని పేర్కొంటారు, తద్వారా మీరు 'నిజంగా మంచి' యాదృచ్ఛిక సంఖ్యలను యాక్సెస్ చేయగల ఏకైక మార్గం ఇదే."
కావో తాను చాలాకాలంగా ప్రతిపాదించిన బ్లాకింగ్ పూల్ అమలును విడిచిపెట్టాడా అని ముల్లర్ అడిగాడు. కావో లుటోమిర్స్కీ యొక్క పాచెస్ని తీసుకోవాలని యోచిస్తున్నట్లు మరియు కెర్నల్కు తిరిగి నిరోధించే ఇంటర్ఫేస్ను జోడించడాన్ని చురుకుగా వ్యతిరేకిస్తున్నట్లు ప్రతిస్పందించాడు.
“నాయిస్ సోర్స్ సరిగ్గా వర్ణించబడిందా లేదా అనే విషయంలో కెర్నల్ ఎలాంటి హామీ ఇవ్వదు. GPG లేదా OpenSSL డెవలపర్ పొందగలిగే ఏకైక విషయం ఏమిటంటే TRUERANDOM "మెరుగైనది" అనే అస్పష్టమైన భావన, మరియు వారికి మరింత భద్రత కావాలి కాబట్టి, వారు నిస్సందేహంగా దానిని ఉపయోగించడానికి ప్రయత్నిస్తారు. ఏదో ఒక సమయంలో ఇది బ్లాక్ చేయబడుతుంది మరియు మరికొందరు స్మార్ట్ యూజర్ (బహుశా పంపిణీ నిపుణుడు) దానిని init స్క్రిప్ట్లోకి చొప్పించినప్పుడు మరియు సిస్టమ్లు పని చేయడం ఆపివేసినప్పుడు, వినియోగదారులు లైనస్ టోర్వాల్డ్స్కు మాత్రమే ఫిర్యాదు చేయాల్సి ఉంటుంది."
కావో క్రిప్టోగ్రాఫర్లు మరియు వాస్తవానికి TRNG అవసరం ఉన్నవారు తమకు తగినట్లుగా ఉపయోగించుకోవడానికి వినియోగదారు స్థలంలో వారి స్వంత ఎంట్రోపీని పండించడానికి ఒక మార్గాన్ని అందించాలని కూడా వాదించారు. ఎంట్రోపీని సేకరించడం అనేది కెర్నల్ చేత అది సపోర్ట్ చేసే అన్ని విభిన్న హార్డ్వేర్లపై నిర్వహించగలిగే ప్రక్రియ కాదని, అలాగే వివిధ మూలాల ద్వారా అందించబడిన ఎంట్రోపీ మొత్తాన్ని కెర్నల్ స్వయంగా అంచనా వేయదని ఆయన చెప్పారు.
"కెర్నల్ విభిన్న శబ్ద మూలాలను కలిపి ఉండకూడదు మరియు అది ఒక విపరీతమైన సాధారణ CPUలో ఒక రకమైన "ట్విచి ఎంట్రోపీ గేమ్" ఆడటానికి ప్రయత్నిస్తున్నప్పుడు అది ఎన్ని బిట్స్ ఎంట్రోపీని పొందుతుందో తెలుసుకోవడానికి ప్రయత్నించకూడదు. వినియోగదారు వినియోగదారుల కోసం ఆర్కిటెక్చర్. IOT/ఎంబెడెడ్ కేసులు ఒకే మాస్టర్ ఓసిలేటర్తో సమకాలీకరించబడని సందర్భాలు, రిజిస్టర్ను మళ్లీ ఆర్డర్ చేయడానికి లేదా పేరు మార్చడానికి CPU సూచన లేని చోట, మొదలైనవి."
“మీరు ఈ గణనలను చేయడానికి ప్రయత్నించే సాధనాలను అందించడం గురించి మాట్లాడవచ్చు, కానీ ప్రతి వినియోగదారు యొక్క హార్డ్వేర్పై ఇటువంటి పనులు చేయాలి, ఇది చాలా మంది పంపిణీ వినియోగదారులకు ఆచరణాత్మకమైనది కాదు. ఇది క్రిప్టోగ్రాఫర్ల కోసం మాత్రమే ఉద్దేశించబడినట్లయితే, అది వారి వినియోగదారు స్థలంలో చేయనివ్వండి. మరియు GPG, OpenSSL మొదలైనవాటిని సులభతరం చేయవద్దు, తద్వారా ప్రతి ఒక్కరూ "మాకు "నిజమైన యాదృచ్ఛికత" కావాలి మరియు తక్కువ ధరతో సరిపెట్టుకోము." మేము క్రిప్టోగ్రాఫర్లకు ఇంటర్ఫేస్లను ఎలా అందిస్తాము అనే దాని గురించి మాట్లాడవచ్చు, తద్వారా వారు ప్రాథమిక శబ్ద మూలాలను యాక్సెస్ చేయడం ద్వారా వారికి అవసరమైన సమాచారాన్ని పొందవచ్చు, వేరు చేయబడి మరియు పేరు పెట్టారు, మరియు బహుశా ఏదో ఒకవిధంగా నాయిస్ సోర్స్ లైబ్రరీ లేదా యూజర్ స్పేస్ అప్లికేషన్కు ప్రామాణీకరించవచ్చు."
అటువంటి ఇంటర్ఫేస్ ఎలా ఉంటుందనే దాని గురించి కొంత చర్చ జరిగింది, ఉదాహరణకు కొన్ని ఈవెంట్లకు భద్రతాపరమైన చిక్కులు ఉండవచ్చు. ఎంట్రోపీ సేకరణలో భాగంగా కీబోర్డ్ స్కాన్ కోడ్లు (అనగా కీస్ట్రోక్లు) ఒక పూల్లో మిళితం చేయబడతాయని కావో పేర్కొన్నాడు: "దీనిని ఒక ప్రత్యేక సిస్టమ్ కాల్ ద్వారా కూడా వినియోగదారు స్థలంలోకి తీసుకురావడం తెలివితక్కువ పని కాదు." ఇతర ఈవెంట్ సమయాలు సైడ్ ఛానెల్ల ద్వారా కొంత రకమైన సమాచార లీకేజీని సృష్టించే అవకాశం ఉంది.
కాబట్టి Linux యొక్క రాండమ్ నంబర్ సబ్సిస్టమ్తో దీర్ఘకాలంగా ఉన్న సమస్య పరిష్కారానికి మార్గంలో ఉన్నట్లు కనిపిస్తోంది. యాదృచ్ఛిక సంఖ్య సబ్సిస్టమ్ ఇటీవల జరిగిన మార్పులు వాస్తవానికి దానిని ఉపయోగిస్తున్నప్పుడు మాత్రమే DoS సమస్యలకు దారితీశాయి. ఇప్పుడు కెర్నల్ అందించగల ఉత్తమ యాదృచ్ఛిక సంఖ్యలను పొందడానికి సమర్థవంతమైన మార్గాలు ఉన్నాయి. TRNG ఇప్పటికీ Linuxలో కావాల్సినది అయితే, భవిష్యత్తులో ఈ లోపాన్ని పరిష్కరించాల్సి ఉంటుంది, అయితే ఇది కెర్నల్లోనే జరగదు.
కొన్ని ప్రకటనలు 🙂
మాతో ఉన్నందుకు ధన్యవాదాలు. మీరు మా కథనాలను ఇష్టపడుతున్నారా? మరింత ఆసక్తికరమైన కంటెంట్ని చూడాలనుకుంటున్నారా? ఆర్డర్ చేయడం ద్వారా లేదా స్నేహితులకు సిఫార్సు చేయడం ద్వారా మాకు మద్దతు ఇవ్వండి,
ఆమ్స్టర్డామ్లోని ఈక్వినిక్స్ టైర్ IV డేటా సెంటర్లో Dell R730xd 2x చౌకగా ఉందా? ఇక్కడ మాత్రమే
మూలం: www.habr.com