মেশিন লার্নিং কি SHA256 হ্যাশগুলি ডিকোড করতে পারে?


43

আমার একটি 64 অক্ষর SHA256 হ্যাশ রয়েছে।

আমি এমন একটি মডেলকে প্রশিক্ষণ দেওয়ার প্রত্যাশা করছি যা অনুমান করতে পারে যদি হ্যাশ তৈরির জন্য ব্যবহৃত সরলখণ্ডটি 1 বা না থেকে শুরু হয়।

এটি যদি "সম্ভাব্য" হয় তা নির্বিশেষে কোন অ্যালগরিদম সেরা পন্থা হতে পারে?

আমার প্রাথমিক চিন্তা:

  • 1 দিয়ে শুরু হওয়া হ্যাশগুলির একটি বৃহত নমুনা এবং একটি 1 দিয়ে শুরু না হওয়া হ্যাশের একটি বৃহত নমুনা তৈরি করুন
  • হ্যাশের 64৪ টি অক্ষরের প্রত্যেকটিকে কোনও না কোনও অব্যবহৃত লজিস্টিক রিগ্রেশন মডেলের জন্য প্যারামিটার হিসাবে সেট করুন।
  • মডেলটি সঠিক / ভুল হলে তা জানানোর মাধ্যমে প্রশিক্ষণ দিন।
  • আশা করি এমন একটি মডেল তৈরি করতে সক্ষম হবেন যা পূর্বাভাস দিতে পারে যদি প্লেইনটেক্সটটি একটি উচ্চ পর্যায়ে যথাযথতার সাথে (এবং একটি শালীন কাপা দিয়ে) 1 দিয়ে শুরু হয় বা না হয়

22
এফওয়াইআই: এটি সম্ভবত বিটকয়েন খনির দ্বারা অনুপ্রাণিত হয়েছে।
ClojureMostly

55
"এটি 'সম্ভব' কিনা তা বিবেচনা না করে আমি কীভাবে এমন কোনও মডেলকে প্রশিক্ষণ দেব যা আমাকে ভ্রমণে সময়োপযোগী করতে পারে?"
কনরাড রুডলফ

13
@Joshua ওপি চায় invert রয়েছে SHA-256। SHA-256 এর মতো এক হাজার গুণ পদক্ষেপ নেওয়া হলেও আমি তাকে প্রকাশ করতে দেব। যুক্তিটি পরাস্ত করার জন্য সমাধানটি বাস্তবে একেবারে বাস্তবের মধ্যে তৈরি একটি বাগটি ব্যবহার করার কারণে আমি বিদ্যমানটিও বন্ধ করব।
কনরাড রুডল্ফ

15
সমস্ত SHA256 হ্যাশগুলি স্ট্রিং দ্বারা উত্পন্ন করা যেতে পারে যা "1" দিয়ে শুরু হয়।
বিক্রিয়াকারী

8
@cgTag আমি দুঃখিত তবে এটি ঠিক ভুল। ইনপুট আউটপুট নিয়ন্ত্রণ করে, অন্যথায় এটি প্রথম স্থানে কোনও ফাংশন হবে না। এছাড়াও, আপনার কাছে জিনিসের অসীম তালিকা রয়েছে বলে এর অর্থ এই নয় যে সেগুলির মধ্যে একটি শুরু হয় 1. আপনি একটি এসই মন্তব্যে একটি পরিচিত ক্রিপ্টোগ্রাফি অনুমানকে প্রমাণ করার চেষ্টা করছেন। দ্রষ্টব্য: আমি এটিও সত্য বলে বিশ্বাস করি তবে এটি সত্য বলে দাবি করা বিভ্রান্তিকর। আপনি যদি সঠিক থাকেন তবে অবশ্যই একটি কাগজ বা অন্য কোনও রেফারেন্স থাকবে।
পেড্রো এ

উত্তর:


98

এটি আসলে কোনও পরিসংখ্যানের উত্তর নয়, তবে:

না , আপনি হ্যাশ থেকে প্লেটেক্সটসের প্রথম চরিত্রটি নির্ধারণ করতে পারবেন না, কারণ প্রদত্ত হ্যাশটির জন্য "প্লেইনটেক্সট" বলে কিছুই নেই।

SHA-256 হ্যাশিং অ্যালগরিদম। আপনার প্লেইন টেক্সট যাই হোক না কেন, আপনি একটি 32-বাইট স্বাক্ষর বের করেন যা প্রায়শই 64-অক্ষরের হেক্স স্ট্রিং হিসাবে প্রকাশ করা হয়। সম্ভাব্য character৪ টি চরিত্রের হেক্স স্ট্রিংয়ের চেয়ে অনেক বেশি সম্ভাব্য প্লেইন্টেক্সট রয়েছে - একই হ্যাশ যে কোনও সংখ্যক পৃথক প্লেটেক্সট থেকে তৈরি করা যেতে পারে। বিশ্বাস করার কোনও কারণ নেই যে প্রথম অক্ষরটি '1' না হওয়া প্রদত্ত হ্যাশ তৈরির সমস্ত প্ল্যাটেক্সটেক্সগুলিতে সমান।


21
এটি এখন পর্যন্ত (আমার মতে) একমাত্র সঠিক উত্তর। অন্যান্য সমস্ত উত্তর হ্যাশ (প্রকৃত প্রশ্ন) উল্টানো শেখার চেয়ে হ্যাশ ফাংশন শেখার সমস্যাটির সাথে আরও মোকাবিলা করে বলে মনে হচ্ছে। তারা সকলেই মনে করে যে এটি হ্যাশিং কোনও ইনজেকশন ফাংশন নয় ignore
লুকা সিটি

7
আপনি কি প্রথম চরটি এক হওয়ার সম্ভাবনাটি অনুমান করতে পারবেন না ? এক-থেকে-এক-নেসের অভাব পরিসংখ্যান শেখার কোনও অস্বাভাবিক সমস্যা নয়।
ম্যাথু ড্র্যারি

16
@ ম্যাথড্রুরি প্রদত্ত যে SHA256 সমস্ত ইনপুট একটি নির্দিষ্ট হ্যাশের জন্য সমানভাবে তৈরি করার জন্য তৈরি করা হয়েছে, আশা করা যায় যে কোনও হ্যাশের জন্য 1 দ্বারা শুরু হওয়া অসীম ইনপুটগুলি আসবে । সুতরাং আপনি যদি সম্ভাবনাটি অনুমান করতে চান তবে আপনার সেরা অনুমানটি প্রায় হতে চলেছে । 1256±ε
কনরাড রুডল্ফ

12
হ্যাঁ, রাজি। আমি কেবল লক্ষ করতে চেয়েছিলাম যে ইঞ্জেকটিভিটির অভাব মেশিন লার্নিংয়ের প্রয়োগের সাথে আসলে কাঠামোগত সমস্যা নয়।
ম্যাথু ড্রুরি

6
@ আইমিল যে কারণে আমি উল্লেখ করেছি যে এটি হ্যাশ ফাংশনটি নির্দিষ্টভাবে উল্লেখ করেছে তা কোনও হ্যাশ ফাংশন সম্ভবত কখনই সেই তথ্য প্রকাশ করতে পারে না তা বোঝাতে নয় , "বিবৃতি" বলে কিছু নেই বলে বিবৃতিতে অনুপ্রেরণা জাগাতে। অবশ্যই, একটি (খারাপ) হ্যাশ ফাংশন আংশিকভাবে বিপর্যয়কর হতে পারে এবং স্পষ্টতই আমাদের প্লেইলেটসেটগুলির পুরো সেট সম্পর্কে কিছু বলতে পারে যা এটি উত্পাদন করে, তবে SHA-256 এর বিশ্বাস করার কোনও কারণ নেই।
ক্রিস এইচ

51

SHA256 যথাসম্ভব এলোমেলোভাবে ডিজাইন করা হয়েছে, সুতরাং আপনি 1-উপসর্গযুক্ত প্লেইন টেক্সট থেকে আসে না এমনগুলি থেকে হ্যাশগুলি পৃথক করতে সক্ষম হবেন না; হ্যাশ স্ট্রিংয়ের এমন কোনও বৈশিষ্ট্য নেই যা সেই তথ্যকে দূরে সরিয়ে দেবে।


5
"অসম্ভব" এবং "উচিত" - আলগোরিদিম আমাকে কী বলবে তা ঠিক ts প্রথম নজরে এটি অসম্ভব বলে মনে হয় তবে এই অনুমানটি পরীক্ষা করার জন্য অ্যালগরিদম এবং পদ্ধতির কী তা জানতে চাই।
জন

24
+1 এটি গ্যারান্টিযুক্ত যে কোনও ধরণের "অপ্রচারিত লজিস্টিক রিগ্রেশন মডেল" অনুমান করার চেয়ে আরও ভাল করতে সক্ষম হবে না যদি না এটি সত্যিকারের জ্যোতির্বিজ্ঞানের সংখ্যাগুলিতে সরবরাহ করা না যায়। এই সমস্যাটি উইন্ডমিলসে ঝুঁকছে।
হোয়বার

44
আপনি এটি চেষ্টা করতে পারেন, তবে শিক্ষার্থী এমন একটি পরিসংখ্যানগত সম্পর্ক সন্ধান করার চেষ্টা করবে যা ইচ্ছাকৃতভাবে অস্তিত্বহীনভাবে তৈরির জন্য ডিজাইন করা হয়েছে।
পাভেল কমারভ

32
"যতটা সম্ভব এলোমেলোভাবে ডিজাইন করা" একটি সংক্ষিপ্তসার। বিশেষত, নকশার লক্ষ্য রয়েছে সর্বাধিক অ-রৈখিক নির্ভরতা, যেখানে প্রতিটি ইনপুট বিট আউটপুট বিটের প্রায় 50% বিভক্ত করে এবং প্রতিটি আউটপুট বিট প্রায় 50% ইনপুট বিটের উপর নির্ভর করে। এটি বিভ্রান্তি এবং বিস্তার হিসাবে পরিচিত । এটি এখানে টাস্কটি তৈরি করে (পুরো প্রথম বারটিকে পুনরুদ্ধার করা) পুরো বার্তাটি পুনরুদ্ধার করার মতোই শক্ত।
এমসাল্টারস

12
আমি মনে করি আপনি এই উত্তরে "অসম্ভব" শক্তিশালী করতে পারেন। ওপিতে এলোমেলো অনুমানের চেয়ে সনাক্তকরণযোগ্য উন্নতি সহ সামগ্রীতে বা SHA256 হ্যাশের কোনও অংশের পূর্বাভাস দেওয়ার জন্য পরিসংখ্যান-ভিত্তিক কৌশল প্রয়োগের শূন্য সম্ভাবনা রয়েছে। বাস্তব সমাধানটি মূল বিষয়বস্তুর পুরো লক্ষ্য জনসংখ্যার প্রাক-গণনা করা।
নিল স্লেটার

43

এটি যদি "সম্ভাব্য" হয় তা নির্বিশেষে কোন অ্যালগরিদম সেরা পন্থা হতে পারে?

দুঃখিত, তবে এটি একটি অযৌক্তিক প্রশ্ন। যদি কিছু অসম্ভব হয়, তবে আপনি সমস্যার সর্বোত্তম পদ্ধতির সন্ধান করতে পারবেন না।

এই ক্ষেত্রে, এটি অবশ্যই অসম্ভব হওয়া উচিত কারণ হ্যাশিং একটি একমুখী ফাংশন: বেশ কয়েকটি ইনপুট (অসীম, আসলে) একই আউটপুট উত্পাদন করতে পারে। যদি নিজে থেকে প্রথম বিট ইনপুট কোনওভাবে কোনও নির্দিষ্ট হ্যাশ মানের সম্ভাবনার উপর প্রভাব ফেলবে, এর অর্থ হ্যাশ অ্যালগরিদম সম্পূর্ণ ত্রুটিযুক্ত।

আপনি অবশ্যই একটি নিউরাল নেটওয়ার্ক, লিনিয়ার শ্রেণিবদ্ধকারী, এসভিএম এবং ভবিষ্যদ্বাণী করার চেষ্টা করার জন্য কী করতে পারবেন তা প্রশিক্ষণ দিতে পারেন। এবং যদি আপনি কোনও নির্দিষ্ট হ্যাশিং অ্যালগরিদমের জন্য আউটপুট থেকে নির্ভরযোগ্যভাবে ইনপুটটির পূর্বাভাস দিতে সক্ষম হন তবে এটি প্রমাণ করবে যে এই অ্যালগরিদমটি মূল্যহীন। আমি বলব যে SHA256 এর মতো বহুল ব্যবহৃত অ্যালগরিদমের জন্য এ জাতীয় সম্ভাবনা খুব কম anish যাইহোক, নতুন, অপ্রমাণিত এবং অরীক্ষিত হ্যাশিং অ্যালগরিদমগুলি দ্রুত বাতিল করার পক্ষে এটি একটি যুক্তিসঙ্গত পন্থা।


6
sign(x)

11
@ কনরাডরুডল্ফ: "ওয়ান-ওয়ে ফাংশন" এর এই প্রসঙ্গে একটি নির্দিষ্ট অর্থ রয়েছে যা আপনি ভাবছেন এমন অর্থ নয়। sign(x)এই অর্থে একমুখী ফাংশন নয়, কারণ প্রাক-চিত্রগুলি খুঁজে পাওয়া তুচ্ছ v
ব্যবহারকারী 2357112

4
এটি বলেছিল, আমি মনে করি না যে উত্তরটি "ওয়ান-ওয়ে ফাংশন" সঠিকভাবে ব্যবহার করছে।
ব্যবহারকারী 2357112

1
@ ব্যবহারকারী 2357112 ধন্যবাদ, আমি এটি জানতাম না। আমি কেবলমাত্র একটি ক্রিয়াকলাপ হিসাবে অর্থটি জানতাম যা উদ্দীপক নয় তবে বাইজিকাল নয়। এটিও উত্তরে প্রদত্ত সংজ্ঞা, যা আমি আপত্তি জানালাম।
কনরাড রুডলফ

1
হ্যাঁ, দুঃখিত, আমি সংজ্ঞা দিয়ে কিছুটা শিথিল। তবে, আমি বিশ্বাস করি যে 'ওয়ান-ওয়ে' আরও কঠোর শর্তগুলির চেয়ে নবীনদের কাছে আরও বোধগম্য।
IMIL

26

যদিও কেউ উদাহরণ সহ নেতিবাচক প্রমাণ করতে পারে না। তবুও আমি অনুভব করি যে একটি উদাহরণ উপকারী হবে; এবং সম্ভবত দরকারী। এবং এটি দেখায় যে কেউ কীভাবে অনুরূপ সমস্যাগুলি সমাধান করার চেষ্টা করবে।

মামলার সালে আমি বৈশিষ্ট্য বাইনারি ভেক্টর হয় ব্যবহার বাইনারি ভবিষ্যৎবাণী করার চান , একটি র্যান্ডম বন একটি কঠিন পছন্দ। আমি এই ধরণের উত্তরগুলি আপনার প্রশ্নের দ্বিতীয় অংশে অনুমান করি: একটি ভাল অ্যালগরিদম কী।

আমরা ভালভাবে SHA256 স্ট্রিংগুলিকে বাইনারি (বুলিয়ান) ভেক্টরগুলিতে প্রিপ্রোসেস করতে চাই, কারণ প্রতিটি বিট পরিসংখ্যানগতভাবে স্বতন্ত্র, সুতরাং প্রতিটি বিট একটি ভাল বৈশিষ্ট্য। সুতরাং এটি আমাদের ইনপুটগুলিকে 256 উপাদান বুলিয়ান ভেক্টর তৈরি করবে।

ডেমো

জুলিয়া ডিসিশনট্রি.জেএল লাইব্রেরি ব্যবহার করে কীভাবে পুরো জিনিসটি করা যায় তা এখানে একটি বিক্ষোভ রয়েছে is

জুলিয়া প্রম্পটে নীচের পেস্টটি অনুলিপি করতে পারেন।

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,000 দৈর্ঘ্যের এএসসিআইআই স্ট্রিংয়ের উপর 10,000,000 এর প্রশিক্ষণ। আমি দেখেছি ফলাফল এখানে:

মডেল প্রশিক্ষণ

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যা বিলিয়া ফাংশনটিতে জুলিয়া ব্যবহার করার সময় আমি মূলত একই ফলাফল পেয়েছি (এটি কোনও ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এইচএসএ নয়, তবে এটি এখনও একটি ভাল হ্যাশ তাই সত্যই একই ধরণের স্ট্রিংগুলি আলাদাভাবে পাঠানো উচিত)। আমিও মূলত একই ফলাফল পেয়েছি CRC32c


15

হ্যাশ ফাংশনগুলি (ডিজাইনের মাধ্যমে) তাদের সাথে মেশিন লার্নিং করার জন্য অত্যন্ত খারাপভাবে উপযুক্ত suited

স্থানীয়ভাবে অবিচ্ছিন্ন ক্রিয়াকলাপগুলির মডেলিং / অনুমানের জন্য মূলত এমএল একটি পদ্ধতির পরিবার । উদাহরণস্বরূপ, আপনি এমন কিছু শারীরিক ব্যবস্থা বর্ণনা করার চেষ্টা করছেন যা এর কিছুটা বিচ্ছিন্নতা থাকতে পারে যদিও কিছুটা পরামিতি স্পেসে যথেষ্ট পরিমাণে মসৃণ হয় যাতে পরীক্ষার উপাত্তগুলির বিক্ষিপ্ত নমুনাটি ফলাফলের পূর্বাভাস দেওয়ার জন্য অন্যদের জন্য ব্যবহার করা যেতে পারে ইনপুট. এটি করার জন্য, এআই অ্যালগরিদমগুলিকে একরকমভাবে একটি চতুর ভিত্তিতে উপস্থাপনের জন্য ডেটাগুলি দ্রবীভূত করা দরকার, যার জন্য প্রশিক্ষণে পরামর্শ দেওয়া হয়েছে যে উদাহরণস্বরূপ যদি আপনি এমন এবং এই জাতীয় আকারটি দেখতে পান (যা এই জাতীয় এবং এরূপ সমঝোতার ফলাফলের সাথে সম্পর্কযুক্ত বলে মনে হয়) তবে সেখানে রয়েছে আউটপুটে সংশ্লিষ্ট অঞ্চলে যেমন এবং এই জাতীয় কাঠামো থাকা উচিত (যা আবার কোনও সমঝোতা বা কোনও কিছুর দ্বারা বর্ণিত হতে পারে) এর একটি ভাল সম্ভাবনা।

(আমি জানি, অনেক এমএল পন্থাগুলি মোটেও সমঝোতার মতো নয়, তবে সাধারণ ধারণাটি সর্বদা এক রকম: আপনার কিছু ইনপুট স্পেস রয়েছে যা এত বেশি মাত্রিক যা নিঃসঙ্গভাবে নমুনা দেওয়া অসম্ভব, তাই আপনি একটি চৌকস পঁচন খুঁজে পান যা আপনাকে বহির্ভূতকরণের অনুমতি দেয় তুলনামূলকভাবে বিরল নমুনা থেকে ফলাফল।)

একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনের পিছনে ধারণাটি হল যে প্লেইন টেক্সটে যে কোনও পরিবর্তনের ফলে সম্পূর্ণ ভিন্ন ডাইজেস্ট হওয়া উচিত । সুতরাং আপনি ফাংশনটি কীভাবে পচে যান তা নির্বিশেষে, স্থানীয় অনুমানকারীরা আপনাকে কীভাবে সেই অংশের চারপাশে ছোট ছোট ওঠানামা ফলাফলকে প্রভাবিত করে তা এক্সট্রোপোলেটেড করতে দেয় না। অবশ্যই আপনি যদি সীমিত সংস্থার সমস্ত তথ্য প্রক্রিয়া করেন তবে এটিকে মেশিন লার্নিং বলা হবে না: আপনি কেবল একটি রেইনবো টেবিল তৈরি করছিলেন


4
এটি পড়ে আমার কাছে এটি ঘটেছিল যে ক) একটি রেইনবো টেবিল তৈরি করতে আপনার কী হ্যাশ ফাংশনটি ব্যবহার করতে হবে তা জানতে হবে এবং খ) কোনও মেশিন লার্নিং অ্যালগরিদমকে কোন অ্যালগরিদম ব্যবহারযোগ্য তা সনাক্ত করা সম্ভব হতে পারে, যথেষ্ট পরিমাণে দেওয়া হয়েছে ইনপুট এবং আউটপুটগুলির নমুনা (কমপক্ষে যদি অ্যালগোরিদমে শনাক্তযোগ্য ত্রুটি থাকে)। সুতরাং যদি মূল সমস্যাটি কোনও অজানা হ্যাশ ফাংশন সম্পর্কে চিহ্নিত করা দরকার যা এটি চিহ্নিত করা দরকার তবে এটি ব্যবহারিকভাবে আকর্ষণীয় হতে পারে।
প্রেরক

7

এটি একটি আকর্ষণীয় প্রশ্ন কারণ এটি "মেশিন লার্নিং" হিসাবে কী গণনা করে তা নিয়ে প্রশ্ন উত্থাপন করে। অবশ্যই একটি অ্যালগরিদম আছে যা শেষ পর্যন্ত এই সমস্যাটি সমাধান করা যেতে পারে। এটা এইভাবেই চলে:

  1. আপনার পছন্দসই প্রোগ্রামিং ভাষা বেছে নিন এবং একটি এনকোডিংয়ের বিষয়ে সিদ্ধান্ত নিন যা প্রতিটি স্ট্রিংকে একটি (সম্ভবত খুব বড়) পূর্ণসংখ্যার মানচিত্র করে।

  2. একটি এলোমেলো সংখ্যা চয়ন করুন এবং এটিকে একটি স্ট্রিংয়ে রূপান্তর করুন। এটি আপনার ভাষায় কোনও বৈধ প্রোগ্রাম কিনা তা পরীক্ষা করে দেখুন। যদি তা না হয় তবে অন্য একটি নম্বর বেছে নিন এবং আবার চেষ্টা করুন। যদি এটি হয় তবে এটি শুরু করুন, তাত্ক্ষণিকভাবে বিরতি দিন এবং বিরতি দেওয়া প্রোগ্রামগুলির তালিকায় এটি যুক্ত করুন।

  3. কিছু বিরতিযুক্ত প্রোগ্রামগুলি কিছুক্ষণ চালান। তাদের মধ্যে যদি কোনও পর্যাপ্ত সমাধান উত্পাদন না করেই থামে, তাদের তালিকা থেকে সরিয়ে দিন। যদি একটি পর্যাপ্ত সমাধান উত্পাদন করে, আপনি সম্পন্ন করেছেন! অন্যথায়, সমস্ত কিছুটা চালিয়ে দেওয়ার পরে 2 এ ফিরে যান।

কোনও প্রশ্ন নেই যে আপনার যদি অনন্ত স্টোরেজ এবং অসীম সময় থাকে তবে উপরের অ্যালগরিদম শেষ পর্যন্ত একটি ভাল সমাধান খুঁজে পাবে। তবে সম্ভবত আপনি "মেশিন লার্নিং" বলতে চাইছেন না।

এখানে ঘষা: আপনি যদি সমস্ত সম্ভাব্য সমস্যা বিবেচনা করেন তবে কোনও মেশিন লার্নিং অ্যালগরিদম গড়ে আরও ভাল করতে পারে না! এটি কোনও নিখরচায় মধ্যাহ্নভোজ উপপাদ্য হিসাবে পরিচিত । এটি প্রমাণিত করে যে কোনও সম্ভাব্য সমস্যার মধ্যে আপনি যে কোনও মেশিন লার্নিং অ্যালগরিদমকে ফেলে দিতে পারেন, এটি দ্রুত সমাধান করতে পারে এমন সংখ্যাটি অদৃশ্যভাবে কম।

এটি কেবলমাত্র সেই সমস্যাগুলিকে দ্রুত সমাধান করতে পারে কারণ এগুলি অ্যালগরিদম অনুমান করতে পারে এমন নিদর্শন দ্বারা পরিচালিত হয়। উদাহরণস্বরূপ, অনেক সফল অ্যালগরিদম নিম্নলিখিতটি ধরে নেন:

  1. সমাধানগুলি ম্যাট্রিক্স গুণ এবং অরেখিক বিকৃতিগুলির কয়েকটি জটিল সিরিজ দ্বারা বর্ণনা করা যেতে পারে, এটি একটি পরামিতিগুলির দ্বারা পরিচালিত।

  2. ভাল সমাধানগুলি প্যারামিটার স্পেসে একসাথে ক্লাস্টার করা হবে, যাতে আপনাকে যা করতে হবে তা হল অনুসন্ধানের প্রতিবেশ বেছে নেওয়া, সেখানে সর্বোত্তম সমাধানটি সন্ধান করা, আপনার সন্ধানের আশেপাশে স্থানান্তর করুন যাতে সেরা সমাধানটি কেন্দ্রে থাকে এবং পুনরাবৃত্তি করে।

স্পষ্টতই এই অনুমানগুলি উভয়ই সাধারণভাবে ধারণ করে না। দ্বিতীয়টি বিশেষত সন্দেহজনক। এবং নিখরচায় দুপুরের খাবার আমাদের জানায় যে এই অনুমানগুলি এমনকি বেশিরভাগ সময় ধারণ করে না। আসলে তারা প্রায় কখনও ধরে না! এটি কেবল আমাদের সৌভাগ্য যে তারা আসলে কিছুটা গুরুত্বপূর্ণ সমস্যার জন্য ধারণ করে।

আপনি যে সমস্যাটি চয়ন করেছেন তা শুরু থেকেই ধারণাটি লঙ্ঘন করার জন্য ডিজাইন করা হয়েছে Hash হ্যাশ ফাংশনগুলি বিশেষভাবে তৈরি করা হয়েছে যাতে অনুরূপ ইনপুটগুলি সম্পূর্ণ আলাদা আউটপুট দেয় give

সুতরাং আপনার প্রশ্ন- এই সমস্যাটি সমাধানের জন্য সেরা মেশিন লার্নিং অ্যালগরিদম কী? Ably সম্ভবত খুব সোজা উত্তর রয়েছে: এলোমেলো অনুসন্ধান search


আমি অবাক হই যে কীভাবে কোয়ান্টাম কম্পিউটিংটি নন-ফ্রি-লাঞ্চ-উপপাদ্যকে প্রভাবিত করবে। সম্ভবত, কোয়ান্টাম কম্পিউটিংও এটি দ্বারা সীমাবদ্ধ।
ম্যাক্স ভার্নন

1
@ ম্যাক্স ভার্নন ওহ, আকর্ষণীয় আমি আশা করব যে অন্যান্য কোয়ান্টাম অ্যালগরিদমের তুলনায় সমস্ত কোয়ান্টাম অ্যালগরিদমের সমান সম্পত্তি রয়েছে । আমি জানি না যে সমস্ত কোয়ান্টাম অপ্টিমাইজেশান অ্যালগরিদমের ক্লাসিকালগুলির চেয়ে গড়-কেস স্পিডআপ রয়েছে। তারা পারে! আমার একটি প্রশ্ন এবং স্ব-উত্তর রয়েছে যা প্রাসঙ্গিক হতে পারে এমন একটি "ফ্রি মধ্যাহ্নভোজ" উপপাদ্য সম্পর্কে কথা বলে। (tldr; আপনি যদি কিছু কাজ উপেক্ষা করেন তবে লাঞ্চটি বিনামূল্যে হয় ... তবে কোয়ান্টামের ক্ষেত্রে এটি পরিবর্তন হয় কিনা তা অবাক করি))
প্রেরক

5

এটি অসম্ভবের পাশে। তবে লোকেরা SHA256 এ এমন কিছু নিদর্শন পর্যবেক্ষণ করেছে যা বিটকয়েন (পথে দ্রুত খনন) ব্যবহার করে SHA256 এর জন্য এটির অ-এলোমেলোতার একটি পার্থক্য প্রস্তাব করতে পারে । তাদের টিএলডিআর:

"একটি আদর্শ এলোমেলো ক্রমুয়েশন হ্যাশ এবং SHA256 এর মধ্যে পার্থক্য করার জন্য, বিটকয়েনের মতো দুটিবার প্রার্থী 1024 বিট ব্লকের প্রচুর পরিমাণে (~ 2 ^ 80) হ্যাশ করে। বিটকয়েন প্রোটোকল অনুসারে 512 অর্থ প্রত্যাশিত), বিটকয়েনের "অসুবিধা" স্ট্যান্ডার্ড পূরণ না করে এমন প্রার্থী ব্লকগুলি বাতিল করে (যেখানে ফলাফলগুলি হ্যাশগুলি একটি বৃহত সংখ্যক 0 দিয়ে শুরু হয়) বৈধ ইনপুট প্রার্থীদের বাকি সেট সহ (467369 যখন এই বিশ্লেষণটি সম্পন্ন হয়েছিল), ইনপুট ব্লকের 32 টি বিটের একটি নির্দিষ্ট সেট পর্যবেক্ষণ করুন (যেখানে বিটকয়েনের ননস রয়েছে, সেখানে ইনপুট বিট 607-639 রয়েছে) নোটস ফিল্ডে সেট বিটগুলির গড় সংখ্যা বাম দিকে স্কু করা আছে তা নোট করুন, অর্থাত্ 16 বিটের সেট প্রত্যাশিত মানের চেয়ে কম (আনুমানিক গড় 15.428)। "

লবস্ট.আরএস-এ একটি আলোচনা দেখুন । একটি সম্ভাব্য ব্যাখ্যা খননকারীদের দ্বারা প্রবর্তিত একটি পক্ষপাতিত্ব।


2
এটা মজার. তবে লবস্ট.আরসে উত্তরটি সম্ভবত সঠিক। এটি একটি বিশাল পক্ষপাত, সহজেই আবিষ্কারযোগ্য। এই ধারণাটি যে এটি দীর্ঘকাল ধরে লক্ষ্য করা যায় নি তা বেশ সুদূরপ্রসারী।
প্রেরক

1
@ সেন্ডারেল পক্ষপাতদুটি কাজে লাগানোর জন্য (যদি থাকে), একটি আলগরিদম (মূলত একটি এমএল / অপ্টিমাইজেশন অ্যালগরিদম) নিয়ে আসা উচিত যা অত্যাধুনিক হার্ডওয়্যারটিতে প্রয়োগ করা / পরিমাপের সময় তার নিজের ওভারহেডকে প্রয়োগ করা হয় এটি সরবরাহ করে এমন স্পিডআপ দ্বারা ক্ষতিপূরণ দেওয়া হয়। আমার খুব মোটামুটি অনুমানটি হ'ল # হ্যাশট্রিয়ালের ক্ষেত্রে ফ্যাক্টরটি ব্রুট ফোর্স এবং এর সুপারোটিমাইজড বাস্তবায়নের জন্য 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
[...]

আমি পুরো প্রমাণটি পাঠকের জন্য অনুশীলন হিসাবে রেখে দেব, তবে এর জন্য আমার শব্দটি গ্রহণ করুন: এখানে একটি ইনপুট রয়েছে যা প্রতিটি সম্ভাব্য ডাইজেস্টের জন্য "1" দিয়ে শুরু হয় 0000 থেকে ffff পর্যন্ত।

"1" দিয়ে শুরু হয় না এমন একটি ইনপুটও রয়েছে। এবং শেক্সপিয়ারের সম্পূর্ণ কাজগুলি দিয়ে শুরু হয় one

এটি কোনও যুক্তিসঙ্গতভাবে ভাল হ্যাশ ফাংশনটির জন্য ধারণ করে, যদিও আমার ব্রুট ফোর্স প্রুফটি কম্পিউটারের পক্ষে অপরিবর্তনীয় হয়ে উঠতে পারে।


গণিতে, আমি আপনার শব্দটি এর জন্য নিতে পছন্দ করি না । আপনার প্রোগ্রামটি দেখায় যে আপনার sha16 ফাংশনটি surjative, তবে এর চেয়ে বেশি কিছুই নয়। আপনি কোনও আনুষ্ঠানিক প্রমাণ দেননি যে এই প্রোগ্রামটি প্রকৃত SHA-256 কার্যটি প্রমাণ করতে পারে। আপনার উপসংহার শৈলীর দ্বারা, কোলাটজ অনুমানটি সমাধান হয়ে যাবে কারণ এটি ইতিমধ্যে 32 বিটের জন্য সমাধান হয়েছে এবং প্রোগ্রামটি সহজেই দীর্ঘায়িত হতে পারে।
রোল্যান্ড ইলিগ

4

আপনি যা বর্ণনা করছেন তা মূলত একটি প্রাক-চিত্র আক্রমণ। আপনি এমন একটি ইনপুট সন্ধান করার চেষ্টা করছেন যে এটি হ্যাশ হওয়ার পরে আউটপুটে "শীর্ষস্থানীয় 1" এর মতো কিছু সম্পত্তি রয়েছে *

এটি প্রাক-চিত্রের আক্রমণগুলি প্রতিরোধ করার জন্য ক্রিপ্টোগ্রাফিক হ্যাশগুলির একটি স্পষ্ট লক্ষ্য। আপনি যদি এই ধরনের আক্রমণ করতে পারেন তবে আমরা সেই অ্যালগরিদমটিকে নিরাপত্তাহীন বলে বিবেচনা করব এবং এটি ব্যবহার বন্ধ করব।

সুতরাং এর অর্থ এটি অসম্ভব নয়, এর অর্থ আপনার মেশিন লার্নিং অ্যালগরিদমকে একই সাথে বিশ্বের গণিতবিদদের একটি বিশাল অংশ এবং তাদের সুপার কম্পিউটারগুলিকে ছাড়িয়ে যেতে হবে। আপনি এটি করবেন এমন সম্ভাবনা কম।

তবে, আপনি যদি তা করেন তবে আপনি এমন একজন হিসাবে পরিচিত হয়ে উঠবেন যে কোনও বড় ক্রিপ্টোগ্রাফিক হ্যাশ অ্যালগরিদমকে ভেঙে ফেলে। যে খ্যাতি কিছু মূল্য!

* প্রযুক্তিগতভাবে একটি "প্রথম প্রিমাইজ আক্রমণ" একটি নির্দিষ্ট হ্যাশের জন্য কোনও মিল খুঁজে পাওয়ার চেষ্টা করে। তবে, এটি দেখানোর জন্য যে একটি হ্যাশ অ্যালগরিদমের প্রথম প্রিমেজ আক্রমণ প্রতিরোধ রয়েছে, তারা সাধারণত দেখায় যে আপনি হ্যাশ থেকে ইনপুট সম্পর্কে কোনও অর্থবহ তথ্য খুঁজে পেতে পারেন না।


2

এখানে বেশিরভাগ উত্তরই আপনাকে বলছে আপনি কেন এটি করতে পারবেন না তবে এর প্রত্যক্ষ উত্তর এখানে:

এটি যদি "সম্ভাব্য" হয় তা নির্বিশেষে কোন অ্যালগরিদম সেরা পন্থা হতে পারে?

ইনপুট ধরে নেওয়া যথেষ্ট পরিমাণে বড়:

  1. বৈধ অক্ষরের সেটটির গণনা নিন।
  2. পদক্ষেপ 1 থেকে সংখ্যার পরস্পর গ্রহণ করুন।

ইনপুট স্ট্রিংটি '1' দিয়ে শুরু হওয়ার সম্ভাবনা। এমনকি আপনার ইনপুটটিও দেখার দরকার নেই। আপনি যদি এর থেকে আরও ভাল করতে পারেন তবে এর অর্থ হ্যাশটি খুব নষ্ট হয়ে গেছে। র‌্যান্ডম সংখ্যা বাছাই করার জন্য আপনি অ্যালগরিদমকে প্রশিক্ষণের চেষ্টা করার চেয়ে অনেকগুলি সিপিইউ চক্র সংরক্ষণ করতে পারেন।

আপনি একটি অ্যালগরিদমকে প্রশিক্ষণ দিতে পারেন এবং অত্যধিক ফিটনের কারণে এটি অন্যরকম উত্তর নিয়ে আসতে পারে। হ্যাশ অ্যালগরিদমের সাথে যদি সত্যিই কিছু ভুল হয় তবে তা হয়। এই অ্যালগরিদমটি ব্যবহার করার পরে আপনি প্রায়শই এলোমেলো মান বেছে নিয়েছেন তার চেয়ে বেশি বার ভুল হচ্ছে।


1

হ্যাশিং ফাংশনগুলি উদ্দেশ্যমূলকভাবে মডেল করা কঠিন হওয়ার জন্য ডিজাইন করা হয়েছে, সুতরাং (ইতিমধ্যে চিহ্নিত হিসাবে) এটি খুব কঠিন হতে পারে। তবুও, হ্যাশিং ফাংশনে কোনও দুর্বলতা তার এন্ট্রপিকে হ্রাস করবে, এটি আরও অনুমানযোগ্য করে তুলবে।

এটি যদি "সম্ভাব্য" হয় তা নির্বিশেষে কোন অ্যালগরিদম সেরা পন্থা হতে পারে?

একটি দরকারী উদাহরণ হ'ল ফিজিক্যালি আনক্লোনেবল ফাংশন , বা পিইউএফ - যা একটি হার্ডওয়্যার হ্যাশিং ফাংশনের সাথে সাদৃশ্যপূর্ণ। সাধারণত, উত্পাদন বৈচিত্রগুলি উদ্দেশ্যমূলকভাবে প্রতিটি পিইউএফকে কিছুটা আলাদা প্রতিক্রিয়া জানাতে ব্যবহৃত হয় যাতে প্রদত্ত ইনপুটটির জন্য তাদের 'হ্যাশ' আউটপুট আলাদা হয়। নকশার দুর্বলতাগুলি এনট্রপিকে সীমাবদ্ধ করে এবং পর্যাপ্ত পরিমাণ চ্যালেঞ্জ-প্রতিক্রিয়া যুগল দেওয়া হয় তবে প্রায়শই পিইউএফ-এর একটি ব্ল্যাক-বক্স মডেল তৈরি করা সম্ভব হয় যাতে নতুন, পূর্বে অদেখা চ্যালেঞ্জের প্রতিক্রিয়া পূর্বাভাস করা যায়।

এই মডেলিং আক্রমণগুলির জন্য লজিস্টিক রিগ্রেশন সর্বাধিক ব্যবহৃত পদ্ধতি, যেমন রেহরামের এই কাগজে ।

জেনেটিক অ্যালগরিদম (বা আরও সাধারণভাবে বিবর্তনীয় কৌশল) একটি বিকল্প পদ্ধতির হতে পারে, কারণ এটি এমন সমস্যাগুলির ক্ষেত্রে প্রযোজ্য যা পার্থক্যযোগ্য এবং / অথবা লিনিয়ারালি পৃথকযোগ্য নয়। উপরের গবেষণাপত্রে এগুলি নিয়েও আলোচনা করা হয়েছে।


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 কে ক্র্যাক করবে, প্রমাণ করবে যে এটি ক্র্যাক করা যায় না, বা সিদ্ধান্ত নেবে যে এটি কোনওভাবে করার মতো যথেষ্ট চালাক নয় (ঠিক যেমন মানুষ)। চতুর্থ সম্ভাব্যতা অবশ্যই এই যে একটি সুপার-হিউম্যান কৃত্রিম বুদ্ধিমত্তা এমনকি মাথা ঘামায় না বরং আরও গুরুত্বপূর্ণ যে সমস্যাগুলি (এটির জন্য) তা ভেবে দেখবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.