Makine öğrenimi SHA256 karmalarını çözebilir mi?


43

Ben 64 karakter SHA256 hash var.

Karma üretmek için kullanılan düz metnin 1 ile başlayıp başlamayacağını tahmin edebilecek bir model geliştirmeyi umuyorum.

Bu "Mümkün" olursa olsun, hangi algoritma en iyi yaklaşım olabilir?

İlk düşüncelerim:

  • 1 ile başlayan büyük bir karma örneği ve 1 ile başlamayan büyük karma örneği oluşturun
  • Bir denetimin 64 karakterinin her birini, bir tür denetlenmemiş lojistik regresyon modeli için bir parametre olarak ayarlayın.
  • Modeli doğru / yanlış olduğunu söyleyerek eğitin.
  • Umarım, düz metnin 1 ile başlayıp başlamayacağını yeterince yüksek (ve iyi bir kappa ile) başarabileceğini tahmin edebilecek bir model oluşturabiliriz.

22
Bilginize: Bu büyük olasılıkla bitcoin madenciliği tarafından motive.
ClojureMostly

55
“Bunun mümkün olup olmadığına bakmaksızın zaman yolculuğuna izin veren bir modeli nasıl eğitebilirim?”
Konrad Rudolph

13
@Joshua OP, SHA- 256'yı ters çevirmek istiyor . SHA-256'ya kadar binlerce adım atsa bile yayınlamasına izin vereceğim. Ayrıca, çözümün mantıkları yenmek için gerçeklik dokusunun içindeki bir hatayı neredeyse kesinlikle kullandığı için de varlığımı keseceğim.
Konrad Rudolph

15
Tüm SHA256 karmaları, "1" ile başlayan bir dize tarafından üretilebilir.
Reactgular

8
@cgTag Üzgünüm ama bu sadece yanlış. Giriş, çıkışı kontrol eder, aksi takdirde ilk etapta bir fonksiyon olmaz. Ayrıca, sonsuz bir şeyler listeniz olduğu için, bunlardan birinin 1 ile başladığı anlamına gelmez. Not: Bunun doğru olduğuna da inanıyorum, ancak doğru olduğunu iddia etmek yanıltıcıdır. Haklıysanız, kesinlikle bir kağıt veya başka bir referans olacaktır.
Pedro A

Yanıtlar:


98

Bu gerçekten bir istatistik cevap değil, ama:

Hayır , düz metnin ilk karakterini karma değerinden belirleyemezsiniz, çünkü verilen bir karma için "düz metin" gibi bir şey yoktur.

SHA-256 bir karma algoritmadır. Düz metniniz ne olursa olsun, genellikle 64 karakterlik altıgen bir dize olarak ifade edilen 32 baytlık bir imza alırsınız. Olası 64 karakter altıgen diziden çok daha fazla olası düz metin vardır - aynı karma, herhangi bir sayıda farklı düz metinden üretilebilir. İlk karakterin '1' olmasının / olmamanın, belirli bir hash üreten tüm düz metinler boyunca tek tip olduğuna inanmak için hiçbir sebep yoktur.


21
Bu şimdiye kadar (bence) tek doğru cevap. Diğer tüm cevaplar, hash işlevini tersine çevirmeyi öğrenmek yerine (asıl soru) karma işlevini öğrenme sorunuyla daha fazla ilgileniyor gibi görünmektedir. Hepsi, bunun bir enjekte edici işlevi olmadığını görmezden geliyor gibi görünüyor .
Luca Citi

7
İlk karakterin bir olma ihtimalini tahmin edemez misin ? Bire bir olmaması, istatistiksel öğrenmede nadir görülen bir sorun değildir.
Matthew Drury

16
@MatthewDrury SHA256'nın belirli bir hash için tüm girdileri eşit şekilde mümkün kılmak üzere tasarlandığı göz önüne alındığında, umarım herhangi bir hash için 1 ile başlayan sonsuz sayıda girdi olacaktır . Bu nedenle, olasılığı tahmin etmek istiyorsanız, en iyi tahminin kabaca . 1256±ε
Konrad Rudolph

12
Evet, katılıyorum. Sadece, enjekte olmama eksikliğinin, makine öğrenmesi uygulamasında yapısal bir sorun olmadığını not etmek istedim.
Matthew Drury

6
@IMil Özellikle bir karma işlevin işlevini açıklamamın nedeni, hiçbir karma işlevin bu bilgiyi ortaya çıkaramayacağını söylemek değil , "düz metin" diye bir şeyin olmadığı ifadesini motive etmek değildir. Tabii ki, (kötü) bir karma işlevi kısmen geri dönüşümlü olabilir ve bize açıkça onu üreten bütün düz metinler hakkında bir şeyler söyler, ancak SHA-256'nın buna inanması için hiçbir neden yoktur.
Chris H,

51

SHA256, mümkün olduğunca rastgele olacak şekilde tasarlanmıştır; bu nedenle, 1 ön ekli düz metinden gelen karmaları, yapmayanlardan ayırmanız mümkün değildir; basitçe bu bilgiyi verebilecek karma dizgenin bir özelliği olmamalıdır.


5
"ihtimal dışı" ve "gerekir" - Algoritmanın bana söyleyeceği şey bu. İlk bakışta imkansız gibi görünüyor, ancak bu hipotezi test etmek için hangi algoritmanın ve yaklaşımın uygulanacağını bilmek istiyorum.
John

24
+1 Herhangi bir "denetlenmemiş lojistik regresyon modeli" nin, gerçekten astronomik bir sayıda vaka sağlanamadığı sürece tahmin etmekten daha iyisini yapamayacağı garanti edilmektedir. Bu sorun yel değirmenlerinde eğiliyor.
whuber

44
Bunu deneyebilirsiniz, ancak öğrenci kasıtlı olarak var olmayacak şekilde tasarlanmış istatistiksel bir ilişki bulmaya çalışacaktır.
Pavel Komarov

32
"Mümkün olduğu kadar rasgele olacak şekilde tasarlanmış" bir understatement. Spesifik olarak, tasarım, her bir giriş bitinin, çıkış bitlerinin yaklaşık% 50'sini etkilediği ve her çıkış bitinin, giriş bitlerinin yaklaşık% 50'sine bağlı olduğu, doğrusal olmayan bir bağımlılığa sahip olmayı amaçlamaktadır. Bu karışıklık ve yayılma olarak bilinir . Buradaki görevi yapar (sadece ilk bitin kurtarılması) tüm mesajı kurtarmak kadar zor.
MSalters

12
Bence bu cevabın "olası" olduğunu güçlendirebilirsin. OP, bir SHA256 hashının herhangi bir bölümünü içerikten veya tersi durumdan tahmin etmek için rasgele tahminlerde tespit edilebilir bir iyileştirme bile olsa, istatistik tabanlı teknikleri uygulamada sıfır şansa sahiptir. Pratik çözüm temel olarak, orijinal içeriğin hedef popülasyonunun tamamını önceden hesaplamaktır.
Neil Slater

43

Bu "Mümkün" olursa olsun, hangi algoritma en iyi yaklaşım olabilir?

Üzgünüm, ama bu saçma bir soru. Bir şey imkansızsa, o zaman soruna en iyi yaklaşımı arayamazsın.

Bu durumda, bu kesinlikle imkansız olmalıdır çünkü karma, tek yönlü bir işlevdir: birkaç girdi (sonsuz, aslında) aynı çıktıyı üretebilir. İlk girdi kendi başına bir şekilde belirli bir karma değerin olasılığını etkilerse, bu karma algoritmasının tamamen hatalı olduğu anlamına gelir.

Bir sinir ağı, doğrusal sınıflandırıcı, SVM ve neyin tahmin edilmeyeceğini kesinlikle öğrenebilirsiniz. Ve belirli bir karma algoritma için girdiyi çıktıdan güvenilir bir şekilde tahmin edebilecekseniz, bu algoritmanın değersiz olduğunu kanıtlar. SHA256 gibi yaygın olarak kullanılan bir algoritma için böyle bir ihtimalin ortadan kalktığını söyleyebilirim. Bununla birlikte, yeni, kanıtlanmamış ve denenmemiş karma algoritmaları hızla dışlamak için makul bir yaklaşım.


6
Bir karmaşanın tek yönlü bir işlev olduğu (neredeyse) alakasızdır: , orijinal girdilerin özelliklerini çıkarmama izin veren birçok tek yönlü işlev ( , ünlü doğrusal olmayan bir tek yönlü işlev, bana girdi hakkında çok şey anlatıyor). sign(x)
Konrad Rudolph

11
@KonradRudolph: "Tek yönlü işlev", bu bağlamda düşündüğünüz anlam olmayan özel bir anlama sahiptir . sign(x)bu anlamda tek yönlü bir işlev değildir, çünkü ön görüntüleri bulmak önemsizdir.
user2357112

4
Bununla birlikte, cevabın "tek yönlü işlevi" de doğru kullandığını sanmıyorum.
user2357112

1
@ user2357112 Teşekkürler, bunu bilmiyordum. Anlamını sadece varsayımsal fakat sıfat olmayan bir işlev olarak biliyordum. Aynı zamanda cevabında verilen ve itiraz ettiğim tanım budur.
Konrad Rudolph

1
Evet, üzgünüm, tanımları olan biraz gevşekim. Ancak, 'tek yönlü' acemiler için daha katı şartlardan daha anlaşılabilir olduğuna inanıyorum.
IMil

26

Bir örnek ile olumsuz bir kanıtlamak olamaz iken. Yine de bir örneğin düşündürücü olacağını düşünüyorum; ve belki de faydalıdır. Ve bu, benzer problemleri nasıl çözeceğini (denediğini) gösterir.

Durumunda İkili vektörler olan özelliklerini kullanarak, ikili tahminler yapmak istiyorum , bir Rastgele Orman sağlam bir seçimdir. Sanırım bu tür soruların ikinci kısmına cevap veriyor: iyi bir algoritma nedir.

Her bit istatistiksel olarak bağımsız olduğu için SHA256 dizgilerini ikili (Boolean) vektörlere önceden işlemek istiyoruz, bu nedenle her bit iyi bir özelliktir. Bu da girdilerimizi 256 element boolean vektör yapacaktır.

gösteri

Julia DecisionTree.jl kütüphanesi kullanılarak her şeyin nasıl yapılabileceğinin bir gösterimi .

Aşağıdakileri julia komut istemine yapıştırabilirsiniz.

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)

Sonuçlar

Bunu yaptığımda, 10.000'e kadar uzunluktaki 100.000 rastgele ASCII dizisi üzerinde eğitim aldım. İşte gördüğüm sonuçlar:

Modeli eğitmek

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

Eğitim Seti doğruluğu:

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

Test Seti doğruluğu:

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

Tartışma

Yani bu temelde bir şey değil. Eğitim setinde% 95'ten, test setinde ise% 50'nin üzerine çıktık. Birileri boş
hipotezi reddedebilir miyiz diye görmek için uygun hipotez testleri uygulayabilir , ancak yapamayacağımızdan eminim. Tahmin oranı üzerinde küçük bir gelişmedir.

Bu öğrenilemeyeceğini gösteriyor. Eğer bir Rastgele Orman, tam tahminden sadece tahmin oranına vurarak geçebilir. Rastgele Ormanlar oldukça zor girdileri öğrenebiliyor. Öğrenecek bir şey olsaydı, en azından yüzde birkaç beklerdim.

Kodu değiştirerek farklı karma işlevleriyle uğraşabilirsiniz. hashAsıl ilginç olan, julia'yı yerleşik işlevde kullanırken temelde aynı sonuçları aldım (ki bu kriptografik olarak güvenli bir hsah değil, ama yine de iyi bir karma. Ayrıca temelde aynı sonuçları aldım CRC32c.


15

Karma fonksiyonlar (tasarım gereği) onlarla öğrenen herhangi bir şeyi yapmak için çok uygundur.

ML, esasen, yerel olarak sürekli fonksiyonları modellemek / tahmin etmek için bir yöntem ailesidir . Yani, belirli süreksizliklere rağmen, bir anlamda parametre alanının çoğunda yeterince pürüzsüz olan bazı fiziksel sistemi tanımlamaya çalışıyorsunuz, böylece sadece dağılmış bir test verisi örneği elde edilebilir. giriş. Bunu yapmak için, AI algoritmalarının bir şekilde verileri akıllıca bir temsili halinde ayrıştırması gerekir; bunun için eğitim, örneğin, eğer böyle ve böyle bir şekil görürseniz (bu ve bu tür kıvrımların sonucu ile ilişkili gibi görünüyorsa) o zaman bunun Çıktının ilgili bölgede böyle bir yapıya sahip olması (bu, yine bir evrişim veya başka bir şey ile tanımlanabilen) olması için iyi bir şans.

(Biliyorum ki, birçok ML yaklaşımı konvolüsyona benzemez, ama genel fikir her zaman aynıdır: çok yüksek boyutlu bir girdi alanınız var, yorucu örnekleme yapmak imkansız, bu yüzden ekstrapolasyon yapmanıza izin veren akıllı bir ayrıştırma bulursunuz nispeten seyrek bir numuneden elde edilir.)

Bununla birlikte, kriptografik bir karma fonksiyonun arkasındaki fikir , düz metindeki herhangi bir değişikliğin tamamen farklı bir özetle sonuçlanması gerektiğidir . Bu nedenle, işlevi nasıl ayırdığınıza bakılmaksızın, yerel tahminciler, bu parçadaki küçük dalgalanmaların sonucu nasıl etkilediğini tahmin etmenize izin vermez. Elbette sınırlı bir setin tüm bilgilerini gerçekten işlemezseniz, buna makine öğrenmesi denmez: sadece bir gökkuşağı tablo oluşturuyorsunuz .


4
Bunu okuduğumda bana şunu söyledi: a) bir gökkuşağı tablosu oluşturmak, hangi hash fonksiyonunu kullanmanız gerektiğini bilmeniz gerekir, ve b) bir makine öğrenme algoritmasının, hangi algoritmanın kullanımda olduğunu, yeterince büyük olduğunu belirlemesi mümkün olabilir . giriş ve çıkış örnekleri (en azından algoritma tanımlanabilir kusurlara sahipse). Öyleyse, asıl sorun tanımlanması gereken bilinmeyen bir hash işlevi ile ilgili olarak yeniden düzenlenmişse, pratikte daha ilginç olabilir.
gönderen

7

Bu ilginç bir soru çünkü “makine öğrenmesi” olarak kabul edilenlerle ilgili sorunları ortaya çıkarıyor. Olacak bir algoritma kesinlikle yoktur sonuçta o çözülebilir eğer bu sorunu çözmek. Bu böyle devam ediyor:

  1. Favori programlama dilinizi seçin ve her dizgiyi (potansiyel olarak çok büyük) bir tamsayıya eşleyen bir kodlamaya karar verin.

  2. Rasgele bir sayı seçin ve bir dizgeye dönüştürün. Bunun sizin dilinizde geçerli bir program olup olmadığını kontrol edin. Değilse, başka bir numara seçin ve tekrar deneyin. Öyleyse, başlat, hemen duraklat ve duraklatılmış programların listesine ekle.

  3. Tüm duraklatılmış programları bir süre çalıştırın. Herhangi biri yeterli bir çözüm üretmeden durursa, listeden kaldırın. Biri yeterli bir çözüm üreterse, bitirdiniz! Aksi halde, hepsinin bir süre çalışmasına izin verdikten sonra 2'ye dönün.

Sonsuz depolamaya ve sonsuz zamana sahipseniz, yukarıdaki algoritmanın sonunda iyi bir çözüm bulacağına şüphe yok. Ama muhtemelen "makine öğrenmesi" ile kastettiğiniz şey bu değildir.

İşte ovmak: olası tüm sorunları göz önünde bulundurursanız, hiçbir makine öğrenmesi algoritması ortalama olarak daha iyisini yapamaz! Bu, serbest öğle yemeği teoremi olarak bilinmez . Herhangi bir makine öğrenim algoritmasına atabileceğiniz tüm olası problemler arasında, hızlı bir şekilde çözebilecek sayının ufak bir şekilde küçük olduğunu kanıtlar .

Bu problemleri hızlı bir şekilde çözebilir, çünkü bunlar algoritmanın bekleyebileceği kalıplara tabidir. Örneğin, birçok başarılı algoritma aşağıdakileri varsaymaktadır:

  1. Çözümler, bir dizi parametre tarafından yönetilen bazı karmaşık matris çarpımları ve doğrusal olmayan çarpıtmalarla tanımlanabilir.

  2. İyi çözümler parametre alanında bir araya getirilecektir, böylece tek yapmanız gereken bir arama mahallesi seçmek, en iyi çözümü bulmak, arama mahallenizi en iyi çözümün merkezde olması için kaydırmak ve tekrarlamaktır.

Açıkçası bu varsayımların hiçbiri genel olarak geçerli değil. İkincisi özellikle şüpheli. Ve bedava öğle yemeği, bu varsayımların çoğu zaman bile geçerli olmadığını söylüyor. Aslında neredeyse hiç tutmazlar! Gerçekten önemli olan bazı problemleri yerine getirmeleri bizim şansımız.

Seçtiğiniz problem , baştan sona varsayımı ihlal edecek şekilde tasarlanmıştır. Hash fonksiyonları, benzer girdilerin tamamen farklı çıktılar vermesi için özel olarak tasarlanmıştır.

Peki, sorunuz - bu sorunu çözmek için en iyi makine öğrenme algoritması nedir? - Muhtemelen çok basit bir cevabı vardır: rastgele arama.


Kuantum hesaplamanın bedava öğle yemeği teoremini nasıl etkileyeceğini merak ediyorum. Muhtemelen, kuantum hesaplama da onunla sınırlıdır.
Max Vernon

1
@ MaxVernon oh, ilginç. Tüm kuantum algoritmalarının diğer kuantum algoritmalarına kıyasla aynı özelliğe sahip olmasını beklerdim . Tüm kuantum optimizasyon algoritmalarının klasik olanlara göre ortalama bir durum hızına sahip olup olmadığını bilmiyorum. Olabilir! İlgili olabilecek bir "bedava öğle yemeği" teoreminden bahseden bir sorum ve kendime cevabım var. (tldr; öğle yemeği sadece yapılan çalışmaların bir kısmını görmezden gelirseniz serbest kalır ... ama bunun kuantum durumunda değişip değişmediğini merak ediyorum.)
senderle

5

İmkansız olan yanında. Bununla birlikte, insanlar SHA256'da Bitcoin (yol boyunca daha hızlı madencilik) kullanarak rastgele olmayan A ayırt edici olduğunu önerebilecek bazı modeller gözlemledi . Onların tldr:

"İdeal bir rastgele permütasyon hash ve SHA256 arasındaki farkı ayırt etmek için, Bitcoin'de yapıldığı gibi, 1024 bitlik bloktan büyük miktarda (~ 2 ^ 80) iki kez bloklayın. 512 bekleniyor), Bitcoin protokolüne göre, Bitcoin “zorluk” standardını karşılamayan aday blokları atıyor (sonuçta elde edilen hash'ler çok sayıda 0'la başlıyor). bu analiz yapıldı), giriş bloğunda belirli bir 32 bitlik bir küme gözlemleyin (Bitcoin'in bulunmadığı yerlerde, giriş bitleri 607-639'un bulunduğu). yani, ayarlanan 16 bitin beklenen değerinden daha az (tahmini ortalama 15.428). "

Lobste.rs hakkında bir tartışma bakın . Muhtemel bir açıklama madenciler tarafından ortaya konan bir önyargıdır.


2
Bu ilginç. Ancak lobste.rs üzerindeki cevap muhtemelen doğru. Bu kolayca keşfedilebilir büyük bir önyargı. Bu kadar uzun zamandır fark edilmediği düşüncesi oldukça uzaklaştı.
gönderen

1
@senderle Önyargıdan yararlanmak için (varsa), en gelişmiş donanımlara uygulandığında / ölçülürken baştan sona kendi başına ucuz olacak bir algoritma (temel olarak bir ML / optimizasyon algoritması) bulunmalıdır. sağladığı hız ile telafi edilir. Benim son derece kaba tahminim, kaba kuvvetler ve aşırı gelişmiş uygulamaları yenmek için # hashtriyel faktörün 10 kattan daha büyük olması gerektiğidir. Etkileri, özellikle kripto ve güvenlik protokollerine bahis yapan insanlar için çok ciddi olabilir.
IndieSolver 11:18

4

Bir programla cevap vereceğim. Hesaplama gereksinimlerini azaltmak için, sha256'nın bir varyantını kullanacağım, sha25'i deniyorum, bu sadece sha256'nın ilk 16 biti.

#!/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))

Bu çıktı üretir:

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
[...]

Tam kanıtı okuyucunun alıştırması olarak bırakacağım, ama benim sözümü alıyorum: 0000'den ffff'e kadar her olası özet için "1" ile başlayan bir girdi var.

"1" ile başlamayan bir girdi de var. Ayrıca Shakespeare'in tüm eserleri ile başlayan bir tane var.

Bu, kaba kuvvet kanıtımın hesaplama açısından olanaksız olmasına rağmen, makul derecede iyi bir karma fonksiyon için geçerlidir.


Matematikte sözünü almaktan hoşlanmıyorum . Programınız, sha16 işlevinizin denetleyici olduğunu ancak başka bir şey olmadığını gösteriyor. Bu programın gerçek SHA-256 işlevini kanıtlayabileceğine dair resmi bir kanıt vermediniz. Sonuç tarzınıza göre, Collatz varsayımı , 32 bit için zaten çözülmüş olduğu için çözülmüş olacak ve program daha kolay çalıştırılabilir.
Roland Illig

4

Tanımladığınız şey temel olarak bir görüntü önleme saldırısı. Özetlendiğinde, çıktının "öncü 1" gibi bazı özelliklere sahip olacağı bir giriş bulmaya çalışıyorsunuz. *

Bu tür görüntü önleme saldırılarını önlemek için açık bir şifreleme karma hedefi amacıdır. Böyle bir saldırı yapabilirseniz, bu algoritmanın güvensiz olduğunu ve onu kullanmayı bıraktığını düşünüyoruz.

Bu imkansız olmadığı anlamına gelirken, makine öğrenme algoritmanızın dünyadaki matematikçilerin ve süper bilgisayarlarının büyük bir bölümünü aynı anda kullanmak zorunda kalacağı anlamına gelir. Bunu yapmanız pek mümkün değildir.

Ancak, bunu yaparsanız, büyük bir kriptografik karma algoritmayı bozan biri olarak tanınırsınız. Bu şöhret bir şeye değer!

* Teknik olarak bir "ilk preimage saldırısı" belirli bir hash için eşleşme bulmaya çalışır. Bununla birlikte, bir karma algoritmasının ilk preimage saldırı direncine sahip olduğunu göstermek için, genellikle karma'daki girdiyle ilgili anlamlı bir bilgi bulamadığınızı gösterirler.


2

Buradaki cevapların çoğu size bunu neden yapamayacağınızı söylüyor ancak işte size doğrudan cevap:

Bu "Mümkün" olursa olsun, hangi algoritma en iyi yaklaşım olabilir?

Girişin yeterince büyük olduğunu varsayarak:

  1. Geçerli karakter kümesinin sayısını al.
  2. Sayının tersini 1. adımdan alın.

Giriş dizgisinin '1' ile başlaması olasılığı budur. Girdiye bakmanıza bile gerek yok. Bundan daha iyisini yapabilirseniz, karma çok kırılmış demektir. Rasgele sayıları seçmek için bir algoritma geliştirmeye çalışırken çok fazla CPU çevrimi kaydedebilirsiniz.

Bir algoritma geliştirebilirsin ve fazla uydurma yüzünden farklı bir cevap bulabilirsin. Bu, karma algoritmada gerçekten yanlış bir şey olmadığı sürece. Bu algoritmayı kullanmak, rastgele bir değer seçmenizden daha sık yanlış gidiyor.


1

Karma fonksiyonları, modellemesi zor olacak şekilde tasarlanmıştır, bu nedenle (daha önce belirtildiği gibi) bu çok zor olabilir. Bununla birlikte, karma fonksiyonundaki herhangi bir zayıflık entropisini azaltacak ve daha öngörülebilir hale getirecektir.

Bu "Mümkün" olursa olsun, hangi algoritma en iyi yaklaşım olabilir?

Yararlı bir örnek, bir donanım karma işlevine benzer olan Fiziksel Olarak Klonlanamayan İşlev veya PUF'dir . Tipik olarak, üretim değişiklikleri, her PUF'a biraz farklı bir tepki vermek için kullanılır, böylece belirli bir girdi için 'karma' çıktıları farklı olur. Bununla birlikte, tasarım zayıflıkları entropiyi sınırlar ve yeterli sayıda meydan-cevap çifti verildiğinde, PUF'un kara kutu modelini oluşturmak çoğu zaman mümkün olur, böylece yeni, daha önce görülmeyen bir meydan okuma için yanıt tahmin edilebilir.

Lojistik regresyon, bu modelleme saldırıları için Rührmair'in yazdığı gibi en yaygın kullanılan yaklaşımdır .

Genetik algoritmalar (veya daha genel olarak evrimsel stratejiler), farklılaştırılamayan ve / veya doğrusal olarak ayrılamayan sorunlara uygulanabilir oldukları için alternatif bir yaklaşım olabilir. Aynı zamanda yukarıdaki makalede tartışılmaktadırlar.


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

Sorun, “makine öğrenmenin” akıllı olmamasıdır. Sadece kalıp bulmaya çalışır. SHA-256'da kalıp yoktur. Bulunacak hiçbir şey yok. Makine öğreniminin kaba kuvvetten daha iyi bir şansı yok.

Eğer SHA-256'yı bilgisayardan kırmak istiyorsan, tek ihtimal gerçek istihbarat yaratmaktır ve zeki birçok insan SHA-256'yı yaratmanın bir yolunu bulamadığından, daha ziyade yapay zeka yaratmalısın. birçok zeki insandan. Bu noktada, böyle bir süper insan istihbaratının SHA-256'yı mı kıracağını, çatlayamayacağını ispatlayacağını mı yoksa onun da yeterince akıllı olamayacağına mı karar vereceğimizi bilmiyoruz (tıpkı insanlar gibi). Dördüncü olasılık elbette ki böyle bir süper-insan yapay zekanın bile zahmete girmeyeceği, fakat bunun için daha önemli olan problemleri düşüneceğidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.