Maybe this will help someone with mistyped password on Windows. This is a short Powershell script that tries the passwords read from standard input as rapidly as the particular cryptocoin client will allow. Nice. I should have done something like this from the start. I'll add it to my next version.
|
|
|
You can start from a random nonce. It's a large enough space that you're unlikely to collide with yourself unless you control a significant percentage of the global hashpower. Yes, you can divide the start nonces evenly between your ASICs if you want to try to squeeze out the last fraction of a percent. ![Smiley](https://bitcointalk.org/Smileys/default/smiley.gif)
|
|
|
It's actually easier than that. Your software will just:
* get the data and target with getwork * upload it to the ASIC over SPI * wait for an interrupt * read out the nonce over SPI * return it with submitblock
Bitcoind does all the rest of the work: talking to the network, creating and distributing blocks, everything involving wallets, etc.
|
|
|
I don't use TRC but I believe they use the same address and key format as BTC. The network has no way to know that it's supposed to be a BTC address, so no, it doesn't bounce.
The recipient can import their BTC key into a TRC client to collect the TRC and perhaps send them back.
|
|
|
Hey guys this is amazing any chance i can get help with my 10k ltc wallet? I forgot i had it on my laptop and remember the password as its simmilar and i just change either number at the end or used "ks" instead of "x" or "o" instead of "a" . In this case its over 33characters long and i been at it for a week with a notepad file where i record all combinations i tried and nothing so far :/ I know this is off topic but this is the best answer to similar problem i seen so far. I will give a donation to anyone who can help i know this is just a mispelling because I remember writing it out in a notepad, then copy pasting it twice in ltc wallet and BAM since i cant get it to work ....( yes i know this is extremly stupid ![Cry](https://bitcointalk.org/Smileys/default/cry.gif) to do and yet for some dumb reason i did it to save time ) thanks in advance and sorry to post here regarding ltc wallet agian. Hey, I'm cool with LTC. Let's see what we can do: #!/usr/bin/ruby
passphrase = 'I fargat my paxxward' max_digits = 5
def test(phrase) print phrase, "\t" system("./litecoind", "walletpassphrase", phrase, "20") case $?.exitstatus when 0 puts "Found it! #{phrase}" exit 0 when 127 puts "bitcoind not found in current dir" exit 1 when nil puts "Aborting" exit 1 end end
indexes = (0..passphrase.length-1).select{|i| passphrase[i].match /a|x/} phrases = (0..2**indexes.length-1).map do |mask| new_phrase = passphrase.chars.to_a (0..(indexes.length-1)).select{|i| (mask>>i).odd?}.map do |index| target = new_phrase[indexes[index]] target.sub!("a", "o") target.sub!("x", "ks") target end new_phrase.join end
(0..max_digits).each do |digits| (0..10**digits-1).each do |i| phrases.each do |phrase| test("%s%0#{digits}d" % [phrase,i]) end end end
The instructions are the same as for bitcoind: Set your RPC passphrase, start the litecoind daemon, then start the script running. You should see the passphrases being tested followed by "Error: The wallet passphrase entered was incorrect." I haven't actually tried it on litecoind so let me know if it doesn't work. When you enter your passphrase at the top, use all "a" and "x", don't use "o" or "ks". Set the max_digits to the maximum number of digits to try on the end. It will take about a week as shown: 6 "a"s and "x"es to try and max_digits = 5. Every extra a or x doubles the time. Every extra digit is about 10x the time. Good luck!
|
|
|
What if you know the start of the password and some of the letters in the end?
Roughly how many characters are in the middle? Would it be all numbers, all lowercase, etc? Anything you know will help.
|
|
|
What if i know most of the characters, which are either in the very beginning or in the middle, but missing 3-5 characters(certain letters, numbers, and symbols), that are mostly at the end but might have one or two at beginning?
Then you need something like this: #!/usr/bin/ruby
middle = "password" # The known part in the middle min_left = 0 # The minimum number of chars on the left max_left = 2 # The maximum number of chars on the left max_total = 5 # The max total unknowns chars = 'abcd1234'.chars.to_a # Possible chars to choose from #chars << '\\' # ... plus backslash #chars << "'" # ... plus single quote
def test(phrase) print phrase, "\t" system("./bitcoind", "walletpassphrase", phrase, "20") case $?.exitstatus when 0 puts "Found it! #{phrase}" exit 0 when 127 puts "bitcoind not found in current dir" exit 1 when nil puts "Aborting" exit 1 end end
(1..max_total).each do |length| chars.repeated_permutation(length) do |str| max_offset = [max_left, length].min (min_left..max_offset).each do |offset| left = str.join[0,offset] right = str.join[offset,99] || "" test(left + middle + right) end end end
Fill in the part you know for middle= and put in the characters you want to try in chars= . If you want a backslash or single-quote then remove the # at the start of those lines. Try to keep the chars list small. The time required increases very rapidly as you add more: 10 characters = 8 hours; 20 characters = 11 days; 30 characters = 3 months.
|
|
|
And another: This person knows the middle of the password but forgot the digits on either side. #!/usr/bin/ruby
middle = "password" # The known part in the middle min_per_side = 1 # The minimum number of digits per side max_per_side = 4 # The maximum number of digits per side
def test(phrase) print phrase, "\t" system("./bitcoind", "walletpassphrase", phrase, "20") case $?.exitstatus when 0 puts "Found it! #{phrase}" exit 0 when 127 puts "bitcoind not found in current dir" exit 1 when nil puts "Aborting" exit 1 end end
((2 * min_per_side)..(2 * max_per_side)).each do |length| if length - max_per_side > min_per_side min_per_side = length - max_per_side end (0..(10**length-1)).each do |number| digits = ("%0#{length.to_s}d" % [number]).chars.to_a (min_per_side..(length - min_per_side)).each do |offset| left = digits[0,offset].join right = digits[offset,99].join test(left + middle + right) end end end
Edit: Improved to limit the max digits per side which will help with longer passphrases.
|
|
|
Have your cake and eat it too: 'bitcoin-qt -server'
|
|
|
There's nothing magic about the number 6 - it is simply an arbitrary choice of 1 hour's worth of blocks.
If you only require 1 confirmation it's very easy to perform a Finney attack. You basically mine until you create a conflicting transaction, keep it secret, perform your spend, wait for the confirmation and then release the conflicting transaction to the network, undoing the spend. You now have at least a chance that the chain will be based on your block instead of the other one. Even a 10% success rate is enough if you have a low overhead transaction you can exploit.
With two confirmations you would have to mine two blocks in a row with your conflicting transaction before you spend. That's much more rare, but still statistically possible to do at least on very rare occasions, and might be viable for high value, very low friction transactions.
By 6 confirmations it simply won't work. The frequency that you'll just happen to mine six blocks before the rest of the network gets one is extremely low unless you have a significant double-digits percentage of global hashpower. At that point you're already close to a 51% attack.
On the other hand, 2 confirmations is usually enough for low value transactions involving nonfungible products.
|
|
|
Another custom version: in this case he knows the start and end of the passphrase, but there are some words missing in the middle. This will try some of the most common English words in a classic dictionary attack. The words are all lowercase, no punctuation, and run together without spaces. Fill in the "start" and "finish" parts of the passphrase, choose how common of words you want, fill in your special words in dictionary_extra, then run it. I recommend using dictionary_size=5000 and max_words=2 for the first run, then 500 and 3 for the second run. 5000 and 3 will take far too long. #!/usr/bin/ruby -w
start = "pass" # This is the part at the start that you remember with 100% certainty finish = "word" # The end, which you also remember with 100% certainty dictionary_size = 5000 # The number of common English words to load from the online dictionary dictionary_extra = %w{one two three} # Some extra words which aren't in the dictionary max_words = 2 # The maximum number of words to try not including the start and finish parts max_word_length = 8 # Use only short words
require 'open-uri'
def test(phrase) printf "%40s ", phrase system("./bitcoind", "walletpassphrase", phrase, "20") case $?.exitstatus when 0 puts "Found it! #{phrase}" exit 0 when 127 puts "bitcoind not found in current dir" exit 1 when nil puts "Aborting" exit 1 end end
dictionary = dictionary_extra dictionary += open('http://www.wordfrequency.info/free.asp?s=y') do |stream| stream .read .split('<tr>') .map{ |i| i.scan(%r{<td>(.*)</td>}).flatten[1] }[7,5000] end dictionary.reject!{|i| i.match(/[^a-z]/)} # Exclude words with punctuation dictionary.select!{|i| i.length <= max_word_length } # Only short words dictionary.map!(&:downcase) # Even proper nouns are lower case dictionary.uniq! # Filter out any duplicates dictionary = dictionary[0,dictionary_size] # only use this many words
(0..max_words).each do |num_words| dictionary.permutation(num_words) do |perm| test(start + perm.join + finish) end end
|
|
|
Here's another version customized for a specific request. In this case he knows the start and end of his passphrase, but he forgot the number in between except that it definitely doesn't have any zeroes. Just edit in the parts you know where it says "pass" and "word". This may be useful for anyone in a "missing number" situation. You can set the start or end to "" (empty string) if the mystery number is at the end or beginning, and you can add 0 to the list of digits if yours might have a zero. #!/usr/bin/ruby -w
start = "pass" finish = "word"
def test(phrase) print phrase, "\t" system("./bitcoind", "walletpassphrase", phrase, "20") case $?.exitstatus when 0 puts "Found it! #{phrase}" exit 0 when 127 puts "bitcoind not found in current dir" exit 1 when nil puts "Aborting" exit 1 end end
(0..20).each do |length| [1,2,3,4,5,6,7,8,9].repeated_permutation(length) do |digits| test(start + digits.join + finish) end end
|
|
|
There is some nonlinearity. The shorter blocks decrease variance; that reduces the chance of opportunistic attacks like Finney. After 7 minutes you probably have three LTC confirms and you can be reasonably certain your transaction is permanent. On BTC you have only one confirm, maybe zero, and it's very easy for a hidden block to be released.
This assumes equal hashrate and all bets are off if they have access to enough hashpower for a true 51% attack.
|
|
|
No. That's why there are mandatory fees.
|
|
|
I thought Shor's algorithm will break elliptic curve encryption once quantum computers are sufficiently large? It just cuts the effective key size in half. The current 160-bit signatures will be brute forced in 2^80 operations. That sounds weak, but it's going to be a long time before quantum computers reach 160-bit levels (if ever), and even when they do the operations per second will be very low and 2^80 will be infeasible for a long time thereafter. You're thinking of Grover's algorithm. Shor's algorithm does indeed break ECDSA in polynomial time, though we're a very long way off a useful implementation. And note that Bitcoin public keys are 256 bits, not 160 bits - the hash is 160 bits, but this is not broken by Shor's algorithm. You are correct. The lame thing is I actually know that. https://bitcointalk.org/index.php?topic=54542.msg651428#msg651428tl;dr: ECDSA will break terribly, but we can use another pubkey algorithm if necessary, and all addresses with no spent coins should be safe since they're also protected by the hashes.
|
|
|
|