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ı?
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...
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ı.
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.
neymiş bu şifreli içerik
içerik nekadar değerli
belki fpga ile birşeyler yapılabilinir.
hex dosyasının şifreli formatı varmış mı?
kim neyle şifrelemiş
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,
@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ş...
@esensoy , Elinizde bir c kodu varsa GPU uzerinde bruteforce deneyebilirim. Kodun durumuna gore CUDA ile paralellestirmeye calisabilirim. Cok acele mi?
@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..
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
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.
Peki Bitcoin miner lar konusunda ne diyorsun?
Bir de bu gpu lar tek cekirdekli mi?
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.
Bitcoin VHDL ile yazılmış sha-256 örneği ilginiz çekebilir RAM kullanımı yüksek olduğundan dolayı içinde RAM blok miktarı FPGA seçilmesinde fayda var.
-- ------------------------------------------------------------------------
-- Copyright (C) 2010 Arif Endro Nugroho
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
--
-- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
--
-- THIS SOFTWARE IS PROVIDED BY ARIF ENDRO NUGROHO "AS IS" AND ANY EXPRESS
-- OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- DISCLAIMED. IN NO EVENT SHALL ARIF ENDRO NUGROHO BE LIABLE FOR ANY
-- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-- ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- POSSIBILITY OF SUCH DAMAGE.
--
-- End Of License.
-- ------------------------------------------------------------------------
--
-- MaxMessage <= 2^64 bits
-- BlockSize == 512 bits
-- WordSize == 32 bits
-- MDigestSize == 256 bits
-- Security == 128 bits
--
-- SHLnx = (x<<n)
-- SHRnx = (x>>n)
-- ROTRnx = (x>>n) or (x<<w-n)
-- ROTLnx = (x<<n) or (x>>w-n)
--
-- f0 = ((x and y) xor (not(x) and z)) -- Ch(x,y,z)
-- f1 = ((x and y) xor (x and z) xor (y and z) -- Maj(x,y,z)
-- f2 = ROTR 2(x) xor ROTR 13(x) xor ROTR 22(x) -- Sigma0(x)
-- f3 = ROTR 6(x) xor ROTR 11(x) xor ROTR 25(x) -- Sigma1(x)
-- f4 = ROTR 7(x) xor ROTR 18(x) xor SHR 3(x) -- Tetha0(x)
-- f5 = ROTR 17(x) xor ROTR 19(x) xor SHR 10(x) -- Tetha1(x)
--
-- h0 = 0x6a09e667
-- h1 = 0xbb67ae85
-- h2 = 0x3c6ef372
-- h3 = 0xa54ff53a
-- h4 = 0x510e527f
-- h5 = 0x9b05688c
-- h6 = 0x1f83d9ab
-- h7 = 0x5be0cd19
--
-- k[0-63] looks like better implemented in ROM file
-- with 32 bit in each contants it would take
-- 64 x 32 bit storage which equal to
-- 2048 bit ROM
--
-- Step 1
-- W(t) = M(t) 0 <= t <= 15 -- we need 16x32 (512) bit registers
-- W(t) = f5(W(t-2)) + W(t-7) + f4(W(t-15)) + W(t-16); 16 <= t <= 79
-- W = f5(W( 1)) + W( 6) + f4(W( 14)) + W( 15); 16 <= t <= 79
--
-- Step 2
-- a = h0; b = h1; c = h2; d = h3; e = h4; f = h5; g = h6; h = h7;
--
-- Step 3
-- for t 0 step 1 to 63 do
-- T1= h + f3(e) + f0(e, f, g) + k(t) + W(t)
-- T2= f2(a) + f1(a, b, c)
-- h = g
-- g = f
-- f = e
-- e = d + T1
-- d = c
-- c = b
-- b = a
-- a = T1 + T2
--
-- Step 4
-- H0 = a + h0;
-- H1 = b + h1;
-- H2 = c + h2;
-- H3 = d + h3;
-- H4 = e + H4;
-- H5 = f + H5;
-- H6 = g + H6;
-- H7 = h + H7;
--
-- 31 63 95 127 159 191 223 255 287 319 351 383 415 447 479 511
-- 0 32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 512
-- 0 1 2 3 4 5 6 7 8 9 a b c d e f
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity sha256 is
port(
m : in bit_vector ( 31 downto 0); -- 32 bit data path require 16 clock to load all 512 bits of each block
init : in bit; -- initial message
ld : in bit; -- load signal
md : out bit_vector ( 31 downto 0); -- 5 clock after active valid signal is the message hash result
--probe
--a_prb : out bit_vector ( 31 downto 0);
--b_prb : out bit_vector ( 31 downto 0);
--c_prb : out bit_vector ( 31 downto 0);
--d_prb : out bit_vector ( 31 downto 0);
--e_prb : out bit_vector ( 31 downto 0);
--f_prb : out bit_vector ( 31 downto 0);
--g_prb : out bit_vector ( 31 downto 0);
--h_prb : out bit_vector ( 31 downto 0);
--k_prb : out bit_vector ( 31 downto 0);
--w_prb : out bit_vector ( 31 downto 0);
--ctr2p : out bit_vector ( 3 downto 0);
--ctr3p : out bit_vector ( 5 downto 0);
--sc_pr : out bit_vector ( 1 downto 0);
--probe
v : out bit; -- hash output valid signal one clock advance
clk : in bit; -- master clock signal
rst : in bit -- master reset signal
);
end sha256;
architecture phy of sha256 is
component c4b
port (
cnt : out bit_vector ( 3 downto 0);
clk : in bit;
rst : in bit
);
end component;
component c6b
port (
cnt : out bit_vector ( 5 downto 0);
clk : in bit;
rst : in bit
);
end component;
component romk
port (
addr : in bit_vector ( 5 downto 0);
k : out bit_vector ( 31 downto 0)
);
end component;
signal ih : bit_vector ( 31 downto 0);
signal h0 : bit_vector ( 31 downto 0);
signal h1 : bit_vector ( 31 downto 0);
signal h2 : bit_vector ( 31 downto 0);
signal h3 : bit_vector ( 31 downto 0);
signal h4 : bit_vector ( 31 downto 0);
signal h5 : bit_vector ( 31 downto 0);
signal h6 : bit_vector ( 31 downto 0);
signal h7 : bit_vector ( 31 downto 0);
signal k : bit_vector ( 31 downto 0);
signal im : bit_vector ( 31 downto 0);
signal iw : bit_vector ( 31 downto 0);
signal w : bit_vector ( 31 downto 0); -- current working register
signal w0 : bit_vector (511 downto 0); -- working register 1
signal a : bit_vector ( 31 downto 0); -- a register
signal b : bit_vector ( 31 downto 0); -- b register
signal c : bit_vector ( 31 downto 0); -- c register
signal d : bit_vector ( 31 downto 0); -- d register
signal e : bit_vector ( 31 downto 0); -- e register
signal f : bit_vector ( 31 downto 0); -- f register
signal g : bit_vector ( 31 downto 0); -- g register
signal h : bit_vector ( 31 downto 0); -- h register
signal f0 : bit_vector ( 31 downto 0);
signal f1 : bit_vector ( 31 downto 0);
signal f2 : bit_vector ( 31 downto 0);
signal f3 : bit_vector ( 31 downto 0);
signal f4 : bit_vector ( 31 downto 0);
signal f5 : bit_vector ( 31 downto 0);
signal ctr2 : bit_vector ( 3 downto 0); -- 4 bit counter (zero to 16)
signal ctr2_rst: bit;
signal ctr3 : bit_vector ( 5 downto 0); -- 6 bit counter (zero to 64)
signal ctr3_rst: bit;
signal vld : bit;
signal nld : bit;
signal ild : bit;
signal ild_rst : bit;
begin
ct2 : c4b
port map (
cnt => ctr2,
clk => clk,
rst => ctr2_rst
);
ct3 : c6b
port map (
cnt => ctr3,
clk => clk,
rst => ctr3_rst
);
rom0 : romk
port map (
addr => ctr3,
k => k
);
--probe signal
--a_prb <= a;
--b_prb <= b;
--c_prb <= c;
--d_prb <= d;
--e_prb <= e;
--f_prb <= e;
--g_prb <= e;
--h_prb <= e;
--k_prb <= k;
--w_prb <= w;
--ctr2p <= ctr2;
--ctr3p <= ctr3;
--probe signal
--persistent connection
--f0 == ((x and y) xor (not(x) and z)) -- f0(e, f, g)
f0 <= ((e and f) xor (not(e) and g));
--f1 == ((x and y) xor (x and z) xor (y and z) -- f1(a, b, c)
f1 <= ((a and b) xor (a and c) xor (b and c));
--f2 == ROTR 2(x) xor ROTR 13(x) xor ROTR 22(x) -- f2(a)
f2 <= (a ( 1 downto 0) & a ( 31 downto 2)) xor
(a ( 12 downto 0) & a ( 31 downto 13)) xor
(a ( 21 downto 0) & a ( 31 downto 22));
--f3 == ROTR 6(x) xor ROTR 11(x) xor ROTR 25(x) -- f3(e)
f3 <= (e ( 5 downto 0) & e ( 31 downto 6)) xor
(e ( 10 downto 0) & e ( 31 downto 11)) xor
(e ( 24 downto 0) & e ( 31 downto 25));
--f4 == ROTR 7(x) xor ROTR 18(x) xor SHR 3(x) -- w0(479 downto 448)
f4 <= (w0(454 downto 448) & w0(479 downto 455)) xor
(w0(465 downto 448) & w0(479 downto 466)) xor
(B"000" & w0(479 downto 451));
--f5 == ROTR 17(x) xor ROTR 19(x) xor SHR 10(x) -- w0( 63 downto 32)
f5 <= (w0( 48 downto 32) & w0( 63 downto 49)) xor
(w0( 50 downto 32) & w0( 63 downto 51)) xor
(B"0000000000" & w0( 63 downto 42));
with ctr2( 2 downto 0) select -- omit bit 4
ih <= h0 when B"000",
h1 when B"001",
h2 when B"010",
h3 when B"011",
h4 when B"100",
h5 when B"101",
h6 when B"110",
h7 when B"111";
--W == f5(W( 1)) + W( 6) + f4(W( 14)) + W( 15); 16 <= t <= 79
--iw <= f5 + w0(223 downto 192) + f4 + w0(511 downto 480); -- FIXME this adder is very costly and NOT A PORTABLE CODE
iw <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(f5)) + unsigned(to_stdlogicvector(w0(223 downto 192))) + unsigned(to_stdlogicvector(f4)) + unsigned(to_stdlogicvector(w0(511 downto 480))) ));
process (clk)
begin
if ((clk = '1') and clk'event) then
if (rst = '1') then
w <= (others => '0');
w0 <= (others => '0');
elsif (nld = '1') then -- 0 <= t <= 15 first 512 bit block
w <= im;
w0(511 downto 0) <= (w0(479 downto 0) & im);
else
w <= iw( 31 downto 0) ;
w0(511 downto 0) <= (w0(479 downto 0) & iw( 31 downto 0));
end if;
end if;
end process;
process (clk)
begin
if ((clk = '1') and clk'event) then
if (rst = '1') then
ild <= '0';
nld <= '0';
im <= (others => '0');
else
ild <= nld;
nld <= ld;
im <= m;
end if;
end if;
end process;
process (clk)
begin
if ((clk = '1') and clk'event) then
if ((ild_rst or rst) = '1') then
vld <= '0';
elsif (ctr3 = B"111111") then
vld <= '1';
else
vld <= '0';
end if;
end if;
end process;
ild_rst <= (ild xor ld) and ld;
--ctr2_rst <= ild_rst or rst or vld or (ctr2 = B"0111"); -- set to count to 7 ( 8 clock)
ctr2_rst <= ild_rst or rst or vld or not(ctr2(3) or not(ctr2(2)) or not(ctr2(1)) or not(ctr2(0)));
ctr3_rst <= ild_rst or rst;-- (ctr3 = B"010011"); -- set to count to 63 ( 64 clock)
process (clk)
begin
if ((clk = '1') and clk'event) then
if (init = '1') or (rst = '1') then
h0 <= X"6a09e667";
h1 <= X"bb67ae85";
h2 <= X"3c6ef372";
h3 <= X"a54ff53a";
h4 <= X"510e527f";
h5 <= X"9b05688c";
h6 <= X"1f83d9ab";
h7 <= X"5be0cd19";
elsif (vld = '1') then -- FIXME this adder is very costly and NOT A PORTABLE CODE
h0 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(a)) + unsigned(to_stdlogicvector(h0)) ));
h1 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(b)) + unsigned(to_stdlogicvector(h1)) ));
h2 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(c)) + unsigned(to_stdlogicvector(h2)) ));
h3 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(d)) + unsigned(to_stdlogicvector(h3)) ));
h4 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(e)) + unsigned(to_stdlogicvector(h4)) ));
h5 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(f)) + unsigned(to_stdlogicvector(h5)) ));
h6 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(g)) + unsigned(to_stdlogicvector(h6)) ));
h7 <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(h)) + unsigned(to_stdlogicvector(h7)) ));
-- h0 <= a + h0;
-- h1 <= b + h1;
-- h2 <= c + h2;
-- h3 <= d + h3;
-- h4 <= e + h4;
-- h5 <= f + h5;
-- h6 <= g + h6;
-- h7 <= h + h7;
end if;
end if;
end process;
process (clk)
begin
if ((clk = '1') and clk'event) then
if ((ild_rst or rst) = '1') then
a <= h0;
b <= h1;
c <= h2;
d <= h3;
e <= h4;
f <= h5;
g <= h6;
h <= h7;
else -- FIXME this adder is very costly and NOT A PORTABLE CODE
-- T1 == h + f3(e) + f0(e, f, g) + k(t) + W(t)
-- T2 == f2(a) + f1(a, b, c)
h <= g;
g <= f;
f <= e;
-- e <= d + T1 ;
-- e <= d + h + f3 + f0 + k + w;
e <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(d)) + unsigned(to_stdlogicvector(h)) + unsigned(to_stdlogicvector(f3)) + unsigned(to_stdlogicvector(f0)) + unsigned(to_stdlogicvector(k)) + unsigned(to_stdlogicvector(w)) ));
d <= c;
c <= b;
b <= a;
-- a <= T1 + T2 ;
-- a <= h + f3 + f0 + k + w + f2 + f1;
a <= to_bitvector(std_logic_vector( unsigned(to_stdlogicvector(h)) + unsigned(to_stdlogicvector(f3)) + unsigned(to_stdlogicvector(f0)) + unsigned(to_stdlogicvector(k)) + unsigned(to_stdlogicvector(w)) + unsigned(to_stdlogicvector(f2)) + unsigned(to_stdlogicvector(f1)) ));
end if;
end if;
end process;
md <= ih;
v <= vld;
end phy;
key içeriğinin 16 haneli ve sadece rakamlardan oluştuğunu varsayalım. (ben olsam mutlaka harf, nokta, virgül vs. kullanırdım)
10000000000000000 farklı keyimiz var.
saniyede 10000000 key deneyebildiğimizi varsayalım (elinizde kesin bir rakam varsa ona göre hesaplanır.)
10000000 x 60 x 60 x 24 x 365 = 315360000000000 bir yılda bu kadar key deneyebiliriz.
bu da yaklaşık 30 yıl eder. harf ve ascii karakter kullanılmadığını da bilmiyoruz. elde keyin içeriğine dair başka bir ipucu olmadığı sürece, bence bu işlem imkansız.
kolay gelsin.
Alıntı yapılan: kutahyaspor - 10 Nisan 2014, 08:57:00
key içeriğinin 16 haneli ve sadece rakamlardan oluştuğunu varsayalım. (ben olsam mutlaka harf, nokta, virgül vs. kullanırdım)
10000000000000000 farklı keyimiz var.
saniyede 10000000 key deneyebildiğimizi varsayalım (elinizde kesin bir rakam varsa ona göre hesaplanır.)
10000000 x 60 x 60 x 24 x 365 = 315360000000000 bir yılda bu kadar key deneyebiliriz.
bu da yaklaşık 30 yıl eder. harf ve ascii karakter kullanılmadığını da bilmiyoruz. elde keyin içeriğine dair başka bir ipucu olmadığı sürece, bence bu işlem imkansız.
kolay gelsin.
Bu algoritmayı n parçaya bölsem ve bir program oluştursam,
Nette de desem ki ey nvidia cudaminer lar, bu programı çalıştırın bitcoinden kazandığınızın x katını vereceğim size,
Kaç kişi bulurum??
Ya da desem ki hadi xtea şifre kırıp caka satacağız, voltran ı oluşturalım, kaç kişi gelir?
Ben sizin ya da sizden önce bana "imkansız" demişlerin laflarına zaten kulak asmıyorum da, umarım bu örnekler düşünce sisteminizi açmaya yardımcı olur,
@esensoy eğer bu işi FPGA ile yapacaksan elimde ki kartlardan (Cyclone IV EP4C10F17CN8) birini senin bu işin için kullanabilirim.
http://imageshack.com/a/img42/8643/4gwx.jpg (http://imageshack.com/a/img42/8643/4gwx.jpg)
Hocam eldeki pcleri karıştırırken köşede duran laptopta cuda uyumlu 310M ekran kartı olduğunu farkettim,
https://developer.nvidia.com/cuda-gpus (https://developer.nvidia.com/cuda-gpus)
Bu sayfada Compute Capability olarak 1.2 vermiş, anlaşılıyor ki deneme amaçlı kullanılabilir,
Kodu vhdl ya da verilog a çabukça çevirebilecek kadar iyi olmadığımı düşünüyorum, biraz vakit alacak,
CUDA lar ise bildiğin C ile çalışıyor, o sebepten önceliğim ekran kartında denemek,
Nezaketiniz için yine de teşekkür ederim, FPGA tarafını da denemeye kalkarsam mutlaka iletişime geçerim sizinle,
bu işler için AMD(ATI) kartlar daha çok tercih ediliyor. paralel işlem üniteleri Nvidia GPUlardan daha fazla. OpenCL ile progam geliştiriyorlar.
1 adet GTX580, 1 adet Radeon HD5450 de var.
programda GPU yu mutlaka termal olarak izleyin cudaminer çalışırken ortalama 80C GPU sıcaklığı görüyorum. bir müddetsonra kasadan jet türbini gibi ses gelmeye başlıyor. :)
Alıntı yapılan: MC_Skywalker - 10 Nisan 2014, 10:38:24
bu işler için AMD(ATI) kartlar daha çok tercih ediliyor. paralel işlem üniteleri Nvidia GPUlardan daha fazla. OpenCL ile progam geliştiriyorlar.
1 adet GTX580, 1 adet Radeon HD5450 de var.
programda GPU yu mutlaka termal olarak izleyin cudaminer çalışırken ortalama 80C GPU sıcaklığı görüyorum. bir müddetsonra kasadan jet türbini gibi ses gelmeye başlıyor. :)
Hocam soyle bir duzeltme yapmak istiyorum Amd kartlardaki paralel islem unitelerinin fazla olmasi yuzunden degil de bit bazlı işlemleri daha kisa surede yapmasindan kaynakli bir fark var. Yoksa nvidia nin da 3000 civarinda cekirdek iceren kartlari da var.
Aslinda tum mesele kodunuzun ekran karti mimarisine gore ne olcude iyi yazildigina bagli. Ayni isi yapan 2 kod arasinda 20-30 katlik farklar gorebilirsiniz.
Bunun bariz bir ornegi cuda miner mesela eski versiyonu ile 100k-105k hash aldiginiz karttan sadece yazilimla 190k hash almaya basliyorsunuz. İster Amd olsun ister nvidia , kodun nasil yazildigi onemli.
benim okuduğum bir forumda böyle bir beyanda bulunmuşlar. konuyu tekrar araştırayım.
birde kullandığınız havuz önemli. Cuda miner GTX580 için 200-256Kh değer gösterirken, havuzun gösterdiği değer 180-190Kh görünüyor.
kim hangi programla neiçin şifrelemiş
hex codu nerde kullanılacak
hex codu bootmu ediliyor yoksa direct flashamı yazılıyor.
birazdaha bilgi işleri kolaylaştırır.
peki şifresiz kısmını nerden biliyorsunuz.
70k ya 10core pipeline koydum zorlasam 15 sığar.
100 mhzde her 2 clokta bir şifre dener saniyede 500*10^6 tane şifre dener
ama bu bile süreyi pek düşüremedi 1000 yıllar alacak.
https://www.mediafire.com/?4dr1vd4pz20vcd3 (https://www.mediafire.com/?4dr1vd4pz20vcd3)
10K sığan versionu var ise boştaki karta denemek için yüklerim. (Cyclone IV EP4C10F17CN8)
tek bir core pipeline16round 5k.
ayrıca tek core la ne bulucan.
tek core saniyede 50M şifre dener
@esensoy hocam var mı bir gelişme? :)
siz parayı dökün
bulun bana
en büyük fpga serisinden 1000-2000 tane falan
olacak gelişmeyi söyliyelim