क्या मशीन लर्निंग SHA256 हैश को डीकोड कर सकता है?


43

मेरे पास 64 कैरेक्टर SHA256 हैश है।

मैं एक मॉडल को प्रशिक्षित करने की उम्मीद कर रहा हूं जो यह अनुमान लगा सकता है कि हैश उत्पन्न करने के लिए इस्तेमाल किए जाने वाले प्लेटेक्स्ट 1 या नहीं के साथ शुरू होता है।

भले ही यह "संभव" है, क्या एल्गोरिथ्म सबसे अच्छा दृष्टिकोण होगा?

मेरे शुरुआती विचार:

  • हैश का एक बड़ा नमूना उत्पन्न करें जो 1 से शुरू होता है और एक हैश का बड़ा नमूना जो 1 से शुरू नहीं होता है
  • हैश के 64 वर्णों में से प्रत्येक को किसी प्रकार के अनुपयोगी लॉजिस्टिक रिग्रेशन मॉडल के पैरामीटर के रूप में सेट करें।
  • सही / गलत होने पर यह बताकर मॉडल को प्रशिक्षित करें।
  • उम्मीद है कि एक मॉडल बनाने में सक्षम हो सकता है जो अनुमान लगा सकता है कि प्लेटेक्स्ट 1 से शुरू होता है या उच्च सटीकता के साथ नहीं होता है (और एक सभ्य कप्पा के साथ)

22
FYI करें: यह बिटकॉइन माइनिंग से प्रेरित है।
क्लोजुरेमोस्टली

55
"मैं एक मॉडल को कैसे प्रशिक्षित करूंगा जो मुझे समय यात्रा करने की अनुमति देता है, भले ही यह 'संभव' हो?"
कोनराड रूडोल्फ

13
@ जोशुआ ओपी SHA-256 को पलटना चाहता है । अगर उसे SHA-256 की तुलना में हजार गुना ज्यादा कदम उठाने पर भी मैं उसे प्रकाशित करने देता हूं। मैं भी मौजूदा संघर्ष को समाप्त कर दूंगा क्योंकि समाधान निश्चित रूप से तर्क को हराने के लिए वास्तविकता के बहुत कपड़े के भीतर एक बग का शोषण करता है।
कोनराड रुडोल्फ

15
सभी SHA256 हैश को एक स्ट्रिंग द्वारा उत्पन्न किया जा सकता है जो "1" से शुरू होता है।
रिएक्टगुलर

8
@cgTag मुझे खेद है लेकिन यह सिर्फ गलत है। इनपुट आउटपुट को नियंत्रित करता है, अन्यथा यह पहली जगह में एक फ़ंक्शन नहीं होगा। इसके अलावा, सिर्फ इसलिए कि आपके पास चीजों की एक अनंत सूची है, इसका मतलब यह नहीं है कि उनमें से एक 1 से शुरू होता है। आप एक एसई टिप्पणी में एक ज्ञात क्रिप्टोग्राफी अनुमान को साबित करने की कोशिश कर रहे हैं। नोट: मेरा यह भी मानना ​​है कि यह सच है, लेकिन यह दावा है कि यह सच है भ्रामक है। यदि आप सही हैं, तो निश्चित रूप से एक पेपर या कुछ अन्य संदर्भ होंगे।
पेड्रो ए

जवाबों:


98

यह वास्तव में एक आँकड़े का जवाब नहीं है, लेकिन:

नहीं , आप हैश से प्लेनटेक्स्ट के पहले चरित्र को निर्धारित नहीं कर सकते, क्योंकि किसी दिए गए हैश के लिए "प्लेटेक्स्ट" जैसी कोई चीज नहीं है।

SHA-256 एक हैशिंग एल्गोरिथ्म है। कोई फर्क नहीं पड़ता कि आपका प्लेनटेक्स्ट, आप 32-बाइट हस्ताक्षर से बाहर निकलते हैं, जिसे अक्सर 64-वर्ण हेक्स स्ट्रिंग के रूप में व्यक्त किया जाता है। 64 वर्ण हेक्स स्ट्रिंग्स की तुलना में कहीं अधिक संभव प्लेनटेक्स हैं - एक ही हैश विभिन्न प्लेनटेक्स की किसी भी संख्या से उत्पन्न किया जा सकता है। यह मानने का कोई कारण नहीं है कि पहला वर्ण '1' होने के नाते / किसी दिए गए हैश का निर्माण करने वाले सभी सादे अक्षरों में समान है।


21
यह अब तक (मेरी राय में) एकमात्र सही उत्तर है। अन्य सभी उत्तर हैश फ़ंक्शन (वास्तविक प्रश्न) को उल्टा सीखने के बजाय हैश फ़ंक्शन सीखने की समस्या से अधिक निपटने लगते हैं। वे सब की अनदेखी करने के अपने hashing कि प्रतीत नहीं एक एकैकी फलन।
लुका सिटी

7
क्या आप इस संभावना का अनुमान नहीं लगा सकते कि पहला चर एक है? सांख्यिकीय सीखने में एक-से-एक-नेस की कमी एक असामान्य समस्या नहीं है।
मैथ्यू

16
@MatthewDrury ने यह देखते हुए कि SHA256 को किसी दिए गए हैश के लिए समान रूप से सभी इनपुट बनाने के लिए डिज़ाइन किया गया है, उम्मीद है कि असीम रूप से कई इनपुट 1 के साथ शुरू होंगे, किसी भी हैश के लिए । इसलिए यदि आप संभाव्यता का अनुमान लगाना चाहते हैं, तो आपका सबसे अच्छा अनुमान मोटे तौर पर । 1256±ε
कोनराड रूडोल्फ

12
हाँ, सहमत हूँ। मैं सिर्फ यह नोट करना चाहता था कि मशीन सीखने के आवेदन के साथ इंजेक्शन की कमी वास्तव में एक संरचनात्मक समस्या नहीं है।
मैथ्यू

6
@IMil कारण मैंने विशेष रूप से इस तथ्य का उल्लेख किया है कि यह एक हैश फ़ंक्शन है, जो हैश फ़ंक्शन का सुझाव नहीं दे सकता है वह संभवतः उस जानकारी को कभी भी प्रकट कर सकता है, लेकिन इस कथन को प्रेरित करने के लिए कि "प्लेनटेक्स्ट" जैसी कोई चीज नहीं है। निश्चित रूप से, (खराब) हैश फ़ंक्शन आंशिक रूप से प्रतिवर्ती हो सकता है और स्पष्ट रूप से हमें स्पष्ट रूप से प्लेनेटेक्स के पूरे सेट के बारे में कुछ बताएगा जो इसे उत्पन्न करेगा, लेकिन SHA-256 के बारे में विश्वास करने का कोई कारण नहीं है।
क्रिस एच।

51

SHA256 को जितना संभव हो उतना यादृच्छिक रूप से डिज़ाइन किया गया है, इसलिए यह संभव नहीं है कि आप उन हैश को अलग कर सकें जो 1-उपसर्ग वाले प्लेनटेक्स्ट से आए थे जो नहीं करते हैं; बस हैश स्ट्रिंग की कोई विशेषता नहीं होनी चाहिए जो उस जानकारी को दूर कर दे।


5
"संभावना नहीं" और "चाहिए" - वह एल्गोरिथ्म जो मुझे बताएगा। पहली नज़र में यह असंभव प्रतीत होता है, लेकिन मैं जानना चाहता हूं कि इस परिकल्पना का परीक्षण करने के लिए क्या एल्गोरिदम और दृष्टिकोण लेना चाहिए।
जॉन

24
+1 यह गारंटी दी जाती है कि किसी भी प्रकार का "अप्रयुक्त लॉजिस्टिक रिग्रेशन मॉडल" अनुमान लगाने से बेहतर नहीं कर सकता है जब तक कि इसे सही मायने में खगोलीय संख्या की आपूर्ति नहीं की जा सकती है। यह समस्या पवनचक्कियों पर झुकाव है।
whuber

44
आप इसे आज़मा सकते हैं, लेकिन सीखने वाला एक सांख्यिकीय संबंध खोजने की कोशिश कर रहा होगा जिसे जानबूझकर नहीं बनाया गया है।
पावेल कोमारोव

32
"जितना संभव हो उतना यादृच्छिक होने के लिए डिज़ाइन किया गया" एक समझ है। विशेष रूप से, डिजाइन का लक्ष्य अधिकतम गैर-रेखीय निर्भरता है, जहां प्रत्येक इनपुट बिट लगभग 50% आउटपुट बिट्स को प्रभावित करता है, और प्रत्येक आउटपुट बिट इनपुट बिट्स के लगभग 50% पर निर्भर करता है। इसे भ्रम और प्रसार के रूप में जाना जाता है । यह यहाँ कार्य करता है (केवल पहले बिट को पुनर्प्राप्त करना) पूरे संदेश को पुनर्प्राप्त करने के समान कठिन है।
एमएसलटर्स

12
मुझे लगता है कि आप इस उत्तर में "असम्भव" को मजबूत कर सकते हैं। ओपी के पास किसी भी SHA256 हैश के किसी भी हिस्से की भविष्यवाणी करने के लिए सांख्यिकी-आधारित तकनीकों को लागू करने का शून्य मौका है, या इसके विपरीत, यहां तक ​​कि यादृच्छिक अनुमान लगाने पर भी पता लगाने योग्य सुधार। व्यावहारिक समाधान मूल सामग्री की संपूर्ण लक्ष्य आबादी की पूर्व-गणना करने के लिए मूल रूप से है।
नील स्लेटर

43

भले ही यह "संभव" है, क्या एल्गोरिथ्म सबसे अच्छा दृष्टिकोण होगा?

क्षमा करें, लेकिन यह एक निरर्थक प्रश्न है। यदि कुछ असंभव है, तो आप समस्या के सर्वोत्तम दृष्टिकोण की खोज नहीं कर सकते।

इस मामले में, यह निश्चित रूप से असंभव होना चाहिए क्योंकि हैशिंग एक तरह से कार्य है: कई इनपुट (अनंत, वास्तव में) एक ही आउटपुट का उत्पादन कर सकते हैं। यदि इनपुट का पहला बिट अपने आप में किसी विशिष्ट हैश मूल्य की संभावना को प्रभावित करेगा, तो इसका मतलब यह होगा कि हैश एल्गोरिथम पूरी तरह से त्रुटिपूर्ण है।

आप निश्चित रूप से एक तंत्रिका नेटवर्क, रैखिक क्लासिफायरफ़ाइल, एसवीएम और व्हाट्सएप को भविष्यवाणी करने का प्रयास कर सकते हैं। और यदि आप किसी निश्चित हैशिंग एल्गोरिथ्म के लिए आउटपुट से इनपुट का मज़बूती से अनुमान लगाने में सक्षम होंगे, तो यह साबित होगा कि यह एल्गोरिथ्म बेकार है। मैं कहूंगा कि SHA256 जैसे व्यापक रूप से उपयोग किए जाने वाले एल्गोरिथ्म के लिए ऐसी संभावना गायब है। हालाँकि, यह नए, अप्रमाणित और अप्रयुक्त हैशिंग एल्गोरिदम को जल्दी से नियंत्रित करने के लिए एक उचित दृष्टिकोण है।


6
यह (लगभग) अप्रासंगिक है कि एक हैश एक तरह से कार्य करता है: मेरे सिर के ऊपर से मैं बहुत सारे वन-वे कार्यों के बारे में सोच सकता हूं जो मुझे मूल इनपुट ( सुविधाओं का पता लगाने की अनुमति देते हैं , एक गैर-रेखीय एक-तरफ़ा फ़ंक्शन, जो मुझे इनपुट के बारे में बहुत कुछ बताता है)। sign(x)
कोनराड रुडोल्फ

11
@KonradRudolph: "वन-वे फ़ंक्शन" का इस संदर्भ में एक विशिष्ट अर्थ है कि वह अर्थ नहीं है जो आप सोच रहे हैं। sign(x)इस अर्थ में एकतरफा कार्य नहीं है, क्योंकि पूर्वसूचक ढूंढना तुच्छ है।
user2357112

4
उस ने कहा, मुझे नहीं लगता कि उत्तर "वन-वे फ़ंक्शन" का सही तरीके से उपयोग कर रहा है।
user2357112

1
@ user2357112 धन्यवाद, मुझे यह नहीं पता था। मैं केवल एक फ़ंक्शन के रूप में अर्थ जानता था जो कि विशेषण है लेकिन विशेषण नहीं है। यह भी उत्तर में दी गई परिभाषा है, जो कि मुझे आपत्ति है।
कोनराड रुडोल्फ

1
हाँ, क्षमा करें, मैं परिभाषाओं के साथ थोड़ा ढीला हूं। हालांकि, मेरा मानना ​​है कि 'वन-वे' अधिक सख्त शब्दों की तुलना में नौसिखियों के लिए अधिक समझने योग्य है।
आईएमआईएल

26

जबकि कोई एक उदाहरण के साथ नकारात्मक साबित नहीं कर सकता। फिर भी मुझे लगता है कि एक उदाहरण विचारोत्तेजक होगा; और शायद उपयोगी है। और यह दिखाता है कि कोई व्यक्ति ऐसी ही समस्याओं को कैसे हल करेगा (करने का)।

मामले की में मैं विशेषताएं है कि द्विआधारी वैक्टर हैं का उपयोग कर बाइनरी अनुमान लगाने के लिए, चाहते हैं , एक यादृच्छिक वन एक ठोस विकल्प है। मुझे लगता है कि इस तरह के जवाब आपके सवाल का दूसरा हिस्सा है: एक अच्छा एल्गोरिथ्म क्या है।

हम SHA256 स्ट्रिंग्स को बाइनरी (बुलियन) वैक्टर में प्रीप्रोसेस करना चाहते हैं, क्योंकि प्रत्येक बिट सांख्यिकीय रूप से स्वतंत्र है, इस प्रकार प्रत्येक बिट एक अच्छी विशेषता है। तो यह हमारे इनपुट को 256 एलिमेंट बूलियन वैक्टर बना देगा।

डेमो

यहाँ यह प्रदर्शित किया गया है कि कैसे जूलिया डिसिजनट्री.ज्ल लाइब्रेरी का उपयोग करके पूरे काम को किया जा सकता है ।

आप नीचे दिए गए पेस्ट को जूलिया प्रॉम्प्ट में कॉपी कर सकते हैं।

using SHA
using DecisionTree
using Statistics: mean
using Random: randstring

const maxlen=10_000 # longest string (document) to be hashed.

gen_plaintext(x) = gen_plaintext(Val{x}())
gen_plaintext(::Val{true}) = "1" * randstring(rand(0:maxlen-1))
gen_plaintext(::Val{false}) = randstring(rand(1:maxlen))


bitvector(x) = BitVector(digits(x, base=2, pad=8sizeof(x)))
bitvector(x::AbstractVector) = reduce(vcat, bitvector.(x))

function gen_observation(class)
    plaintext = gen_plaintext(class)
    obs = bitvector(sha256(plaintext))
    obs
end

function feature_mat(obs)
    convert(Array, reduce(hcat, obs)')
end

########################################

const train_labels = rand(Bool, 100_000)
const train_obs = gen_observation.(train_labels)
const train_feature_mat = feature_mat(train_obs)

const test_labels = rand(Bool, 100_000)
const test_obs = gen_observation.(test_labels)
const test_feature_mat = feature_mat(test_obs)


# Train the model
const model = build_forest(train_labels, train_feature_mat)
@show model


#Training Set accuracy:
@show mean(apply_forest(model, train_feature_mat) .== train_labels)

#Test Set accuracy:
@show mean(apply_forest(model, test_feature_mat) .== test_labels)

परिणाम

जब मैंने यह किया, तो 10,000 तक की लंबाई के 100,000 यादृच्छिक ASCII तार पर प्रशिक्षण। ये परिणाम मैंने देखे:

मॉडल को प्रशिक्षित करें

julia> const model = build_forest(train_labels, train_feature_mat)
Ensemble of Decision Trees
Trees:      10
Avg Leaves: 16124.7
Avg Depth:  17.9

प्रशिक्षण सेट सटीकता:

julia> mean(apply_forest(model, train_feature_mat) .== train_labels)
0.95162

टेस्ट सेट सटीकता:

julia> mean(apply_forest(model, test_feature_mat) .== test_labels)
0.5016

विचार-विमर्श

तो वह मूल रूप से कुछ भी नहीं है। हम प्रशिक्षण सेट पर 95% से चले गए, परीक्षण सेट पर मुश्किल से 50% से अधिक। कोई उचित परिकल्पना परीक्षण लागू कर सकता है, यह देखने के लिए कि क्या हम अशक्त
परिकल्पना को अस्वीकार कर सकते हैं , लेकिन मुझे पूरा यकीन है कि हम नहीं कर सकते। यह अनुमान दर पर थोड़ा सुधार है।

इससे पता चलता है कि यह सीखा नहीं जा सकता। यदि एक रैंडम फ़ॉरेस्ट, केवल अनुमानित दर से टकराने के लिए अच्छी तरह से फिट हो सकता है। रैंडम फॉरेस्ट मुश्किल इनपुट्स सीखने में काफी सक्षम हैं। अगर कुछ सीखने को मिलता, तो मैं कम से कम कुछ प्रतिशत की उम्मीद करता।

आप कोड को बदलकर विभिन्न हैश कार्यों के साथ खेल सकते हैं। यह दिलचस्प हो सकता है कि अंतर्निहित hashफ़ंक्शन में जूलिया का उपयोग करते समय मुझे मूल रूप से समान परिणाम मिले (जो कि क्रिप्टोग्राफिक रूप से सुरक्षित hsah नहीं है, लेकिन फिर भी एक अच्छा हैश है इसलिए वास्तव में इसी तरह के तार भेजना चाहिए)। मैं भी मूल रूप से के लिए एक ही परिणाम मिला है CRC32c


15

हैश फ़ंक्शंस (डिज़ाइन द्वारा) उनके साथ कुछ भी मशीन सीखने के लिए बहुत बुरी तरह से अनुकूल हैं।

एमएल अनिवार्य रूप से मॉडलिंग / स्थानीय रूप से निरंतर कार्यों का अनुमान लगाने के तरीकों का एक परिवार है । Ie, आप कुछ भौतिक प्रणाली का वर्णन करने का प्रयास कर रहे हैं, जबकि इसमें कुछ गड़बड़ियां हो सकती हैं, कुछ अर्थों में अधिकांश पैरामीटर अंतरिक्ष में पर्याप्त रूप से चिकना है ताकि परीक्षण डेटा के केवल एक बिखरे हुए नमूने का उपयोग दूसरे के लिए परिणाम की भविष्यवाणी करने के लिए किया जा सके इनपुट। ऐसा करने के लिए, एआई एल्गोरिदम को किसी तरह से डेटा को एक चतुर आधार प्रतिनिधित्व में विघटित करने की आवश्यकता होती है, जिसके लिए प्रशिक्षण ने सुझाव दिया है कि जैसे यदि आप ऐसी और ऐसी आकृति देखते हैं (जो इस तरह के और इस तरह के दृढ़ विश्वास के परिणाम के साथ सहसंबंधित प्रतीत होता है) एक अच्छा मौका है कि आउटपुट का संबंधित क्षेत्र में ऐसा होना चाहिए और ऐसी संरचना (जिसे फिर से एक दृढ़ संकल्प या कुछ और द्वारा वर्णित किया जा सकता है)।

(मुझे पता है, कई एमएल दृष्टिकोण सभी में दृढ़ संकल्प की तरह नहीं हैं, लेकिन सामान्य विचार हमेशा एक ही है: आपके पास कुछ इनपुट स्थान है जो इतनी उच्च आयामी है कि यह आसानी से नमूना करना असंभव है, इसलिए आप एक चतुर अपघटन पाते हैं जो आपको अतिरिक्त रूप से फैलाने की अनुमति देता है तुलनात्मक रूप से विरल नमूने के परिणाम।)

क्रिप्टोग्राफ़िक हैश फ़ंक्शन के पीछे का विचार यह है कि प्लेनटेक्स्ट में किसी भी बदलाव का परिणाम पूरी तरह से अलग पाचन में होना चाहिए । इसलिए कोई फर्क नहीं पड़ता कि आप फ़ंक्शन को कैसे विघटित करते हैं, स्थानीय अनुमानक आपको यह बताने की अनुमति नहीं देंगे कि उस हिस्से के आसपास के छोटे उतार-चढ़ाव परिणाम को कैसे प्रभावित करते हैं। जब तक आप वास्तव में एक सीमित सेट की सभी जानकारी संसाधित करते हैं, लेकिन इसे मशीन लर्निंग नहीं कहा जाएगा: आप बस एक इंद्रधनुष तालिका का निर्माण करेंगे ।


4
इसे पढ़कर, मुझे यह पता चला कि ए) इंद्रधनुष तालिका बनाने के लिए, आपको यह जानने की जरूरत है कि किस हैश फ़ंक्शन का उपयोग करना है, और बी) मशीन लर्निंग एल्गोरिदम के लिए यह संभव हो सकता है कि कौन सा एल्गोरिदम उपयोग में है, यह पहचानने के लिए एक बहुत बड़ा दिया गया इनपुट और आउटपुट का नमूना (कम से कम अगर एल्गोरिथम में पहचान योग्य दोष हैं)। इसलिए यदि मूल समस्या को किसी अज्ञात हैश फ़ंक्शन के बारे में बताया गया है जिसे पहचानने की आवश्यकता है, तो यह अधिक व्यावहारिक रूप से दिलचस्प हो सकता है।
प्रेषित

7

यह एक दिलचस्प सवाल है क्योंकि यह "मशीन सीखने" के रूप में क्या मायने रखता है के बारे में मुद्दों को उठाता है। निश्चित रूप से एक एल्गोरिथ्म है जो अंततः इस समस्या को हल करेगा अगर इसे हल किया जा सकता है। यह इस प्रकार चलता है:

  1. अपनी पसंदीदा प्रोग्रामिंग भाषा चुनें, और एन्कोडिंग पर निर्णय लें जो हर स्ट्रिंग को (संभवतः बहुत बड़े) पूर्णांक में मैप करता है।

  2. एक यादृच्छिक संख्या चुनें और इसे एक स्ट्रिंग में परिवर्तित करें। यह देखने के लिए जांचें कि क्या यह आपकी भाषा में मान्य प्रोग्राम है। यदि यह नहीं है, तो दूसरी संख्या चुनें और फिर से प्रयास करें। यदि यह है, तो इसे शुरू करें, तुरंत इसे रोकें, और इसे रोके गए कार्यक्रमों की सूची में जोड़ें।

  3. थोड़ी देर के लिए सभी रुके हुए प्रोग्राम चलाएं। यदि उनमें से कोई भी पर्याप्त समाधान का उत्पादन किए बिना रुक जाता है, तो उन्हें सूची से हटा दें। यदि कोई पर्याप्त समाधान पैदा करता है, तो आप कर रहे हैं! अन्यथा, सभी को थोड़ा सा चलाने के बाद 2 पर लौटें।

कोई सवाल नहीं है कि यदि आपके पास अनंत भंडारण और अनंत समय है, तो उपरोक्त एल्गोरिथ्म अंततः एक अच्छा समाधान ढूंढेगा। लेकिन यह शायद आप "मशीन सीखने" से मतलब नहीं है।

यहाँ रगड़ना है: यदि आप सभी संभावित समस्याओं पर विचार करते हैं, तो कोई भी मशीन लर्निंग एल्गोरिदम औसतन बेहतर नहीं कर सकता है! यह नो फ्री लंच प्रमेय के रूप में जाना जाता है । यह साबित करता है कि सभी संभावित समस्याओं के बीच आप किसी भी मशीन सीखने के एल्गोरिथ्म में फेंक सकते हैं, जिस संख्या को वह जल्दी से हल कर सकता है वह गायब है।

यह उन समस्याओं को जल्दी से हल कर सकता है क्योंकि वे उन पैटर्नों द्वारा नियंत्रित होते हैं जिन्हें एल्गोरिथम अनुमानित कर सकता है। उदाहरण के लिए, कई सफल एल्गोरिदम निम्नलिखित मानते हैं:

  1. मापदंडों के एक समूह द्वारा शासित मैट्रिक्स गुणन और अरेखीय विकृतियों की कुछ जटिल श्रृंखलाओं द्वारा समाधानों का वर्णन किया जा सकता है।

  2. अच्छे समाधान को पैरामीटर स्पेस में एक साथ जोड़ा जाएगा, ताकि आपको बस एक खोज पड़ोस चुनना पड़े, वहां सबसे अच्छा समाधान ढूंढें, अपने खोज पड़ोस को शिफ्ट करें ताकि सबसे अच्छा समाधान केंद्र में हो, और दोहराएं।

जाहिर है कि इनमें से कोई भी धारणा सामान्य नहीं है। दूसरा विशेष रूप से संदिग्ध है। और कोई भी मुफ्त दोपहर का भोजन हमें यह नहीं बताता है कि ये धारणाएं ज्यादातर समय नहीं रखती हैं। वास्तव में वे लगभग कभी नहीं पकड़ते हैं! यह सिर्फ हमारा सौभाग्य है कि वे कुछ समस्याओं के लिए पकड़ बनाते हैं जो वास्तव में मायने रखती हैं।

आपके द्वारा चुनी गई समस्या शुरू से ही धारणा का उल्लंघन करने के लिए डिज़ाइन की गई है । 2. हश फ़ंक्शन विशेष रूप से डिज़ाइन किए गए हैं ताकि समान इनपुट पूरी तरह से अलग आउटपुट दे सकें।

तो आपका सवाल- इस समस्या को हल करने के लिए सबसे अच्छा मशीन लर्निंग एल्गोरिदम क्या है? - निश्चित रूप से इसका बहुत सीधा जवाब है: यादृच्छिक खोज।


मुझे आश्चर्य है कि क्वांटम कंप्यूटिंग नो-फ्री-लंच-प्रमेय को कैसे प्रभावित करेगी। संभवतः, क्वांटम कंप्यूटिंग इसके लिए विवश है, भी।
मैक्स वर्नोन

1
@MaxVernon ओह, दिलचस्प। मुझे उम्मीद है कि अन्य क्वांटम एल्गोरिदम की तुलना में सभी क्वांटम एल्गोरिदम के पास समान संपत्ति होगी । मुझे नहीं पता कि सभी क्वांटम ऑप्टिमाइज़ेशन एल्गोरिदम में शास्त्रीय लोगों पर औसत-केस स्पीडअप है। वो शायद! मेरे पास एक प्रश्न और आत्म-उत्तर है जो "मुक्त दोपहर के भोजन" प्रमेय के बारे में बात करता है जो प्रासंगिक हो सकता है। (tldr; अगर आप किए गए कुछ कामों को नजरअंदाज करते हैं तो दोपहर का भोजन केवल नि: शुल्क है ... लेकिन मुझे आश्चर्य है कि अगर क्वांटम मामले में परिवर्तन होता है।)
प्रेषक

5

यह असंभव के बगल में है। हालांकि, लोगों ने SHA256 में कुछ पैटर्न का अवलोकन किया जो बिटकॉइन (रास्ते में तेजी से खनन) का उपयोग करके SHA256 के लिए अपनी गैर-यादृच्छिकता का अंतर सुझा सकता है । उनके tldr:

"एक आदर्श यादृच्छिक क्रमपरिवर्तन हैश और SHA256 के बीच अंतर करने के लिए, दो बार बिटकॉइन में किए गए 1024 बिट ब्लॉकों की एक बड़ी राशि (~ 2 ^ 80), यह सुनिश्चित करें कि उम्मीदवार ब्लॉकों के बिट्स बहुत कम सेट किए गए हैं (तुलना में बहुत कम)। 512 का मतलब अपेक्षित है), बिटकॉइन प्रोटोकॉल के अनुसार, बिटकॉइन "कठिनाई" मानक को पूरा नहीं करने वाले उम्मीदवार ब्लॉकों को छोड़ना (जहां परिणामी हैश बड़ी संख्या में 0 से शुरू होता है) वैध इनपुट उम्मीदवारों के शेष सेट के साथ (46799) जब। यह विश्लेषण किया गया था), इनपुट ब्लॉक में 32 बिट्स के एक विशेष सेट का निरीक्षण करें (जहां बिटकॉइन नॉनस है, इनपुट बिट्स 607-639)। ध्यान दें कि नॉन फील्ड में सेट बिट्स की संख्या बाईं ओर तिरछी है, 16 बिट्स सेट (अनुमानित औसत 15.428) के अपेक्षित मूल्य से कुछ कम है। "

Lobste.rs पर एक चर्चा देखें । एक संभावित स्पष्टीकरण खनिकों द्वारा पेश किया गया एक पूर्वाग्रह है।


2
यह दिलचस्प है। लेकिन lobste.rs पर जवाब शायद सही है। यह एक बड़ा पूर्वाग्रह है, आसानी से खोजा जा सकता है। यह धारणा कि यह लंबे समय तक किसी का ध्यान नहीं गया, बहुत दूर है।
प्रेषक

1
@senderle पूर्वाग्रह (यदि कोई है) का फायदा उठाने के लिए, एक एल्गोरिथ्म (अनिवार्य रूप से एक एमएल / अनुकूलन एल्गोरिथ्म) के साथ आना चाहिए, जो कम्प्यूटेशनल रूप से सस्ता है ताकि अत्याधुनिक हार्डवेयर पर लागू / मापा जाए यह प्रदान करता है स्पीडअप द्वारा मुआवजा दिया है। मेरा बहुत मोटा अनुमान यह होगा कि # शश्ट्रीयल के संदर्भ में कारक ब्रूट बल और इसकी सुपरोप्टिमाइज्ड कार्यान्वयन को हराने के लिए 10x से अधिक होना चाहिए। निहितार्थ बहुत गंभीर हो सकते हैं, खासकर क्रिप्टो और सुरक्षा प्रोटोकॉल पर सट्टेबाजी करने वाले लोगों के लिए।
इंडीसोलर

4

मैं एक कार्यक्रम के साथ जवाब दूंगा। कम्प्यूटेशनल आवश्यकताओं को कम करने के लिए मैं sha256 के एक वेरिएंट का उपयोग करूँगा जिसे मैंने sha16 कहा है, जो कि sha256 के पहले 16 बिट्स हैं।

#!/usr/bin/python3

import hashlib
from itertools import count

def sha16(plaintext):
    h = hashlib.sha256()
    h.update(plaintext)
    return h.hexdigest()[:4]

def has_plaintext_start_with_1(digest):
    """Return True if and only if the given digest can be generated from a
    plaintext starting with "1" first bit."""
    return True

def plaintext_starting_with_1(digest):
    """Return a plaintext starting with '1' matching the given digest."""
    for c in count():
        plaintext = (b'\x80' + str(c).encode('ascii'))
        d = sha16(plaintext)
        if d == digest:
            return plaintext

for digest in range(0x10000):
    digest = "%04x" % (digest,)
    plain = plaintext_starting_with_1(digest)
    print("%s hashes to %s" % (plain, digest))

यह उत्पादन का उत्पादन करता है:

b'\x8094207' hashes to 0000
b'\x8047770' hashes to 0001
b'\x8078597' hashes to 0002
b'\x8025129' hashes to 0003
b'\x8055307' hashes to 0004
b'\x80120019' hashes to 0005
b'\x8062700' hashes to 0006
b'\x8036411' hashes to 0007
b'\x80135953' hashes to 0008
b'\x8044091' hashes to 0009
b'\x808968' hashes to 000a
b'\x8039318' hashes to 000b
[...]

मैं पाठक के लिए एक अभ्यास के रूप में पूर्ण प्रमाण छोड़ दूंगा, लेकिन इसके लिए मेरा शब्द लेना चाहिए: एक इनपुट है जो 0000 से fff के लिए प्रत्येक संभव पाचन के लिए "1" से शुरू होता है।

एक इनपुट भी है जो "1" से शुरू नहीं होता है। और शेक्सपियर के पूर्ण कार्यों के साथ भी शुरू होता है।

यह किसी भी उचित रूप से अच्छे हैश फ़ंक्शन के लिए है, हालांकि मेरे पाशविक बल का प्रमाण कम्प्यूटेशनल रूप से संक्रामक हो सकता है।


गणित में, मैं इसके लिए आपका शब्द लेना पसंद नहीं करता । आपका कार्यक्रम दर्शाता है कि आपका sha16 फ़ंक्शन विशेषण है, लेकिन इससे अधिक कुछ नहीं। आपने औपचारिक प्रमाण नहीं दिया कि यह कार्यक्रम वास्तविक SHA-256 फ़ंक्शन को साबित कर सकता है। आपकी निष्कर्ष की शैली से, Collatz अनुमान को हल किया जाएगा क्योंकि यह 32 बिट्स के लिए पहले से ही हल है और कार्यक्रम को आसानी से लंबे समय तक चलाया जा सकता है।
रोलैंड इलिग

4

आप जो वर्णन करते हैं वह मूल रूप से एक पूर्व-छवि का हमला है। आप एक इनपुट खोजने की कोशिश कर रहे हैं जैसे कि, जब यह हैशेड होता है, तो आउटपुट में कुछ गुण होते हैं जैसे "अग्रणी 1"। *

इस तरह के पूर्व-छवि हमलों को रोकने के लिए क्रिप्टोग्राफिक हैश का एक स्पष्ट लक्ष्य है। यदि आप इस तरह का हमला कर सकते हैं, तो हम उस एल्गोरिथ्म को असुरक्षित मानते हैं और उसका उपयोग करना बंद कर देते हैं।

तो जबकि इसका मतलब यह असंभव नहीं है, इसका मतलब है कि आपके मशीन लर्निंग एल्गोरिदम को दुनिया के गणितज्ञों और उनके सुपर कंप्यूटरों के एक बड़े हिस्से को एक साथ निकालना होगा। यह संभावना नहीं है कि आप ऐसा करेंगे।

हालाँकि, अगर आपने किया, तो आपको किसी ऐसे व्यक्ति के रूप में जाना जाएगा जिसने एक प्रमुख क्रिप्टोग्राफ़िक हैश एल्गोरिथम को तोड़ दिया। कि प्रसिद्धि कुछ लायक है!

* तकनीकी रूप से एक "पहला प्राइमेज अटैक" एक विशिष्ट हैश के लिए एक मैच खोजने की कोशिश करता है। हालाँकि, यह दिखाने के लिए कि हैश एल्गोरिथ्म में पहले प्रीइमेज अटैक प्रतिरोधकता है, वे आम तौर पर दिखाते हैं कि आपको हैश से इनपुट के बारे में कोई सार्थक जानकारी नहीं मिल सकती है।


2

यहां सभी उत्तर आपको बता रहे हैं कि आप ऐसा क्यों नहीं कर सकते, लेकिन यहां इसका सीधा जवाब है:

भले ही यह "संभव" है, क्या एल्गोरिथ्म सबसे अच्छा दृष्टिकोण होगा?

यह मानते हुए कि इनपुट पर्याप्त रूप से बड़ा है:

  1. मान्य वर्णों के सेट की गिनती लें।
  2. चरण 1 से संख्या का पारस्परिक ले लो।

यही संभावना है कि इनपुट स्ट्रिंग '1' से शुरू होती है। आपको इनपुट देखने की भी आवश्यकता नहीं है। अगर आप इससे बेहतर कर सकते हैं, तो इसका मतलब है कि हैश बहुत टूट गया है। यादृच्छिक संख्याओं को चुनने के लिए एक एल्गोरिथ्म को प्रशिक्षित करने की कोशिश करने पर आप बहुत सारे सीपीयू चक्रों को बचा सकते हैं।

आप एक एल्गोरिथ्म को प्रशिक्षित कर सकते हैं और यह ओवरफिटिंग के कारण एक अलग उत्तर के साथ आ सकता है। जब तक हैश एल्गोरिथम के साथ कुछ गलत नहीं होता है। इस एल्गोरिथ्म का उपयोग करना तब अधिक बार गलत होता है जब आप केवल एक यादृच्छिक मूल्य उठाते हैं।


1

हेशिंग फ़ंक्शंस उद्देश्यपूर्ण रूप से डिज़ाइन करने के लिए कठिन हैं, इसलिए (जैसा कि पहले ही बताया गया है) यह बहुत मुश्किल होने की संभावना है। फिर भी, हैशिंग फ़ंक्शन में कोई भी कमजोरी इसकी एन्ट्रापी को कम कर देगी, जिससे यह अधिक अनुमानित हो जाएगा।

भले ही यह "संभव" है, क्या एल्गोरिथ्म सबसे अच्छा दृष्टिकोण होगा?

एक उपयोगी उदाहरण है फिजिकली अनकंफर्टेबल फंक्शन , या पीयूएफ - जो एक हार्डवेयर हैशिंग फ़ंक्शन के अनुरूप है। आमतौर पर, विनिर्माण भिन्नता का उद्देश्य प्रत्येक PUF को कुछ अलग प्रतिक्रिया देने के लिए उद्देश्यपूर्ण रूप से किया जाता है ताकि किसी दिए गए इनपुट के लिए उनका 'हैशेड' आउटपुट अलग हो। हालांकि, डिजाइन की कमजोरियां एन्ट्रापी को सीमित कर देती हैं, और पर्याप्त चुनौती-प्रतिक्रिया जोड़े दिए जाने से अक्सर PUF के ब्लैक-बॉक्स मॉडल का निर्माण संभव हो जाता है, ताकि एक नई, पहले अनदेखी चुनौती के लिए प्रतिक्रिया का अनुमान लगाया जा सके।

लॉजिस्टिक रिग्रेशन इन मॉडलिंग हमलों के लिए सबसे अधिक उपयोग किया जाने वाला दृष्टिकोण है, जैसे कि रुहरमेयर द्वारा इस पत्र में ।

जेनेटिक एल्गोरिदम (या आमतौर पर विकासवादी रणनीतियों) एक वैकल्पिक दृष्टिकोण हो सकता है, क्योंकि वे उन समस्याओं पर लागू होते हैं जो भिन्न और / या रैखिक रूप से अलग नहीं हैं। उपरोक्त पेपर में भी उनकी चर्चा की गई है।


1

251222562256

26402641

2256264(2256264)!

S=(2256264)
C=90100S
CSC

(1S1S11S2...1S(C1))(SC1SCSC2SC1SC3SC2...12)=(SC1)!S!

=(110(2256264)1)!(2256264)!
2(2263.99184665662260.6509677217)
210.13222373912260.6509677217

22562512


1

समस्या यह है कि "मशीन लर्निंग" बुद्धिमान नहीं है। यह सिर्फ पैटर्न खोजने की कोशिश करता है। SHA-256 में, कोई पैटर्न नहीं हैं। खोजने को कुछ भी नहीं है। मशीन लर्निंग को ऐसा कोई मौका नहीं मिला है जो ब्रूट फोर्स से बेहतर हो।

यदि आप कंप्यूटर द्वारा SHA-256 को क्रैक करना चाहते हैं, तो एकमात्र संभावना वास्तविक बुद्धिमत्ता बनाने की है , और चूंकि बहुत सारे चतुर मनुष्यों को SHA-256 बनाने का कोई तरीका नहीं मिला है, इसलिए आपको कृत्रिम बुद्धिमत्ता बनाने की आवश्यकता है जो कि बहुत अधिक है कई चतुर मनुष्यों की। उस समय, हम नहीं जानते कि क्या ऐसी सुपर-ह्यूमन इंटेलिजेंस SHA-256 को क्रैक करेगी, यह साबित करेगी कि इसे क्रैक नहीं किया जा सकता है, या यह तय करेगा कि यह या तो करने के लिए पर्याप्त चतुर नहीं है (सिर्फ इंसानों के रूप में)। चौथा अभिप्राय यह है कि इस तरह की सुपर-ह्यूमन आर्टिफिशियल इंटेलिजेंस भी परेशान नहीं करेगी लेकिन उन समस्याओं के बारे में सोचें जो अधिक महत्वपूर्ण हैं (इसके लिए)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.