XTEA şifre kırma, key bulma

Başlatan esensoy, 09 Nisan 2014, 12:21:12

esensoy

Selamlar,
XTEA ile şifrelenmiş bir değişkenim var,
Değişkenin ilk ve son halini biliyorum,
İterasyonun 16 olduğunu,16 byte yani key in her bir karakterinin de 0x20-0x7F arasında olduğunu varsayarak key i elde etmeye çalışıyorum,

Mantık;
4*32bitlik key i 1 er artırarak tüm olasılıkları deniyorum,
key byte larının 0x20 altında ve 0x7F üzerinde kalan kısımlarını elemek için özel bir artir() fonksiyonu oluşturdum,
yazdığım kod ;
void artir(unsigned char* sayi){
	unsigned __int8* j0=sayi;
	unsigned __int8* j1=sayi+1;
	unsigned __int8* j2=sayi+2;
	unsigned __int8* j3=sayi+3;
	unsigned long* sayi1=sayi;
	
	if(*sayi1==0x7F7F7F7F)goto bitir;
	*sayi1=*sayi1+1;
	if (*j0<0x20)*j0=0x20;
	if (*j1<0x20)*j1=0x20;
	if (*j2<0x20)*j2=0x20;
	if (*j3<0x20)*j3=0x20;
	if (*j0>0x7F){
		*j0=0x20;
		*j1=*j1+1;
	}
	if (*j1>0x7F){
		*j1=0x20;
		*j2=*j2+1;
	}
	if (*j2>0x7F){
		*j2=0x20;
		*j3=*j3+1;
	}
	if (*j3>0x7F)*j3=0x20;
bitir:;
}
void encipher(unsigned int iterations, unsigned long* v, unsigned long* key){
    unsigned long v0=v[0], v1=v[1], i;
    unsigned long sum=0, delta=0x9E3779B9;
	FILE *fp;
	unsigned char* ptr;
	for(key[3]=0x20202020;key[3]<0x7F7F7F7F;artir(&key[3])){
		for(key[2]=0x20202020;key[2]<0x7F7F7F7F;artir(&key[2])){
			for(key[1]=0x20202020;key[1]<0x7F7F7F7F;artir(&key[1])){
				for(key[0]=0x20202020;key[0]<0x7F7F7F7F;artir(&key[0])){
					v0=v[0]; v1=v[1]; sum=0;
					for(i=0; i<iterations; i++) 
					{
						v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
						sum += delta;
						v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
					}
					if ((v0==0xEC208375)&(v1==0xE6DB73C6)){
						printf("Dogru v0=%lX,v1=%lX\r\n",v0,v1);
						printf("%X%X%X%X\r\n",key[3],key[2],key[1],key[0]);
						fp = fopen( "buldu.txt", "wb");
						fwrite(ptr,1,16,fp);
						fclose(fp);
					system("pause");
					}else{
						//printf("Yanlış\r\n");
					}
				}
			}
		}
	}
}

Şimdi,
Kodun testlerini yaptım, çalışıyor, sıkıntısı yok

Fakat,
İş boyle olunca key olasılığı (0x7F-0x20)^16 gibi abuk bir rakam çıkıyor ve pc de çok uzun süre alacak,
Benim pc 32 bit win7, bu kodu 64 bit win üzerinde ya da linux üzerinde çalıştırsak anlamlı bir hız artışı olur mu?
Ya da fpga üzerine mi aktarmak lazım, elimde de2-70 kiti var, buradan daha hızlı mı olur?
Ya da hızlandırmak için herhangi bir önerisi olan var mı?
En tehlikeli an "zafer" anıdır.

Kabil ATICI

Kaba kuvvete dayalı bir şifre çözme mantığı kullanarak;
paralel işlem.
Programını işlem yaptıracağın işlemci kartı veya bilgisayara göre parçalara ayır.
örneğin 1-100 1. modül, 101-200 2. modül ... gibi. (bu aralığı modül sayına göre belirlersin)
Her modül kendi bölümünü hesaplasın. Sonucu bulun modül diğerlerine ben buldum desin ve işlem sonucu ile birlikte sonlandırılsın.

İşletim sisteminin fazla bir etkisi olabileceğini sanmıyorum. Bazı yüksek hesap gerektiren işlerde grafik işlemcilerinin paralel kullanımı ile ilgili bazı makaleler okum ise de nasıl yapıldığını bilemiyorum...
ambar7

MC_Skywalker

Bu işlem için FPGA tercih ediliyor.  özellikle şu sanal paraların kullandığı SHA256 algoritması için. 115K lık bir FPGA fit edilebiliyor.  daha ufağı 22K lık olanı başka bir sanal para var scrypt algoritmalı.


SpeedyX

Paralel işlemle aralığı N kat parçalarsan, N kat hızlı sonuç alacağın kesin. Birden fazla core, birden fazla PC deneyebilirsin.

Kodu optimize etmeyi de deneyebilirsin, milyonlarca cycle kazandıracaktır. ASM ile yazabilirsin.

Arama algoritmalarını inceleyebilirsin, bazıları tüm aralığı taramıyor, 3 er 5 er gidiyor, denk gelme olasılığı var diye, aralık bitince, ofseti bir arttırıp yine 3 er 5 er deniyor.
Bazıları ortadan başlıyor sona doğru, sonra ortadan başa doğru gidiyorlar. Burada da denk gelme olasılığına göre yarı yarıya zaman kazanma şansı var.

Kimse 123456789 yada 888888888 gibi bir key kullanmıyor. Bu tarz keyleri boşuna denememek için wordlistler oluşturulmuş, brute force programları bu wordlistlerdeki keyleri deneme yoluyla şifre kırmaya çalışırlar.

Yöntem çok, hepsi boşuna işlem yapmamak, başka bir deyişle cycle kazanmak için düşünülmüşler.

speak48


esensoy

En tehlikeli an "zafer" anıdır.

speak48

içerik nekadar değerli
belki fpga ile birşeyler yapılabilinir.
hex dosyasının şifreli formatı varmış mı?
kim neyle şifrelemiş

esensoy

#7
Hocam XTEA ile şifrelenmiş,
şifreli blok   ; 0x758320ECC673DBE6

şifresiz ascii ; 020000040000FA00

Değer mi =
* Fiyat verecekseniz fiyatınıza bağlı,
* Diğer türlü kendim iki gün üç gün bilemedin bir hafta uğraşıp kod yazıp, aleti kendi kendine bırakayım, 1 ayda çözsün, 2 ayda çözsün, değer,
En tehlikeli an "zafer" anıdır.

Kabil ATICI

@speak48
Buradaki konu ile ne kadar ilgili bilemiyorum;
kullandığım Leadper10 programlayıcısının programında hex dosyalarını şifreleme olanağı vardı. Hex dosyası şifrelendikten sonra bir şekilde okunabilse de içerik düzgün görüntülenemiyordu.(şifreli olarak geliyordu) Ama program işlemci üzerinde çalışıyordu. O zaman için sadece 8051 serisinden olan AT89c52 işlemcileri üzerinde çalıştığımdan diğer işlemciler üzerinde ne yapıp yapmadığına emin değilim. Sanırım özellikle harici eprom kullanan kontroller için geliştirilmiş...
ambar7

muuzoo

@esensoy , Elinizde bir c kodu varsa GPU uzerinde bruteforce deneyebilirim. Kodun durumuna gore CUDA ile paralellestirmeye calisabilirim. Cok acele mi?
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

kutahyaspor

#10
@esensoy

Giriş:  020000040000FA00
Key:   xxxxx (maks. 16 karakter)
Çıkış: 37353833323045434336373344424536 (758320ECC673DBE6)  (32 karakter)

yanlış anlamadıysam durum bu. key harf, rakam, ascii karakteri vs. herşey olabilir. bu durumda brute force yıllar alır..



esensoy

#11
Alıntı yapılan: muuzoo - 09 Nisan 2014, 19:33:38
@esensoy , Elinizde bir c kodu varsa GPU uzerinde bruteforce deneyebilirim. Kodun durumuna gore CUDA ile paralellestirmeye calisabilirim. Cok acele mi?
Hocam acele değil, o dediğiniz nasıl oluyor?
Kod ilk mesajımda var zaten, oradaki v[0] ve v[1] giriş değişkeni,
Bu değişkeni şifreleyip çıktıyı bildiğimiz çıktı ile karşılaştırıyor,

Merak ettiğim başka bir şey daha var, bitcoin üretmek için irili ufaklı kartlar vs malzemeler var, bunlar üzerinde istenilen kod çalıştırılabiliyor mu acaba?

Alıntı yapılan: kutahyaspor - 09 Nisan 2014, 19:55:40
@esensoy

Giriş:  020000040000FA00
Key:   xxxxx (maks. 16 karakter)
Çıkış: 37353833323045434336373344424536 (758320ECC673DBE6)  (32 karakter)

yanlış anlamadıysam durum bu. key harf, rakam, ascii karakteri vs. herşey olabilir. bu durumda brute force yıllar alır..
yıllar alır,
doğru yıllar alır, biz de onu dedik zaten,
diyelim ki 8 yıl alır,
biri dese ki ;
x işlemcisi var, içinde 8 tane core var,
1 yıla düştü,
bu işlemciden de yan yana 12 tane dizdik,
bir aya düştü,
şimdi siz zaten söylediğimiz şeyleri boşverin de bilmediğimiz bir şey biliyor musunuz ondan bahsedin
En tehlikeli an "zafer" anıdır.

muuzoo

Cep telefonundan girdigim icin kodu gormemisim. Yapilmak istenen uygulamaya gore uygulanabilirlik degisiyor. Su an ugrastigim bir algoritmada yaklasik 300 kat hizlanma sagladim. Bir baskasinda ise 4 kat. Yani degisken bir durum.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

esensoy

Peki Bitcoin miner lar konusunda ne diyorsun?
Bir de bu gpu lar tek cekirdekli mi?
En tehlikeli an "zafer" anıdır.

muuzoo

Alıntı yapılan: esensoy - 09 Nisan 2014, 22:40:57
Peki Bitcoin miner lar konusunda ne diyorsun?
Bir de bu gpu lar tek cekirdekli mi?

Bitcoin isi cok kafama yatan bisi degil ama cok ta bilgim yok acikcasi. Gecenlerde okudugum bir yazida su an bitcoin v.b. mining islemleri icin harcanan islem gucu dunyadaki sayili super bilgisayarlarin islem gucunden daha yuksek diyordu.

Gpu lardaki cekirdek kavrami cpu lardakinden farkli. Amd strem processor diye isim veriyor, nvidia ise cuda core diyor. Genel olarak gpu lardaki cekirdekler cpu lara nazaran daha basit daha gucsuz cekirdekler. O yuzden birim alana daha fazla cekirdek sigabiliyor. Literaturde buna tavuk-okuz (chicken vs ox) benzetmesi yapiyorlar. Bir arabayi cekmek icin okuz iyi bir secenek (cpu) ama yere dokulmis misir tanelerini toplayacaksaniz tavuklar (gpu core) en iyi secenek.

Mesela benim elimdeki Gtx 650 Ti Boost kartinda 768 cuda cekirdegi var ve bu kart $160 civarlarinda orta giris seviyesi bir kart.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...