summaryrefslogtreecommitdiff
path: root/42/6c98503379ac080dbaa12ea82c6e164b6235e5
blob: 54a20cd09e5bda988c2a2e6716466f31383aa666 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193]
	helo=mx.sourceforge.net)
	by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.76)
	(envelope-from <gmaxwell@gmail.com>) id 1VXJwB-0001IX-M2
	for bitcoin-development@lists.sourceforge.net;
	Fri, 18 Oct 2013 23:58:35 +0000
Received-SPF: pass (sog-mx-3.v43.ch3.sourceforge.com: domain of gmail.com
	designates 209.85.217.174 as permitted sender)
	client-ip=209.85.217.174; envelope-from=gmaxwell@gmail.com;
	helo=mail-lb0-f174.google.com; 
Received: from mail-lb0-f174.google.com ([209.85.217.174])
	by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128)
	(Exim 4.76) id 1VXJwA-0004l7-JA
	for bitcoin-development@lists.sourceforge.net;
	Fri, 18 Oct 2013 23:58:35 +0000
Received: by mail-lb0-f174.google.com with SMTP id w6so3675382lbh.19
	for <bitcoin-development@lists.sourceforge.net>;
	Fri, 18 Oct 2013 16:58:27 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.112.59.134 with SMTP id z6mr3450706lbq.28.1382140707846;
	Fri, 18 Oct 2013 16:58:27 -0700 (PDT)
Received: by 10.112.89.72 with HTTP; Fri, 18 Oct 2013 16:58:27 -0700 (PDT)
In-Reply-To: <87iowuuof9.fsf@gmail.com>
References: <87iowuuof9.fsf@gmail.com>
Date: Fri, 18 Oct 2013 16:58:27 -0700
Message-ID: <CAAS2fgQ1uYvNxZu6DOKZ2k9qj2kYhGpHxxzsZdsqb-Oi2uSKmw@mail.gmail.com>
From: Gregory Maxwell <gmaxwell@gmail.com>
To: jan <jan.marecek@gmail.com>
Content-Type: text/plain; charset=UTF-8
X-Spam-Score: -1.6 (-)
X-Spam-Report: Spam Filtering performed by mx.sourceforge.net.
	See http://spamassassin.org/tag/ for more details.
	0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked.
	See
	http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
	for more information. [URIs: github.com]
	-1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for
	sender-domain
	0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider
	(gmaxwell[at]gmail.com)
	-0.0 SPF_PASS               SPF: sender matches SPF record
	-0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
	author's domain
	0.1 DKIM_SIGNED            Message has a DKIM or DK signature,
	not necessarily valid
	-0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
X-Headers-End: 1VXJwA-0004l7-JA
Cc: Bitcoin Development <bitcoin-development@lists.sourceforge.net>
Subject: Re: [Bitcoin-development] BIP39 word list
X-BeenThere: bitcoin-development@lists.sourceforge.net
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: <bitcoin-development.lists.sourceforge.net>
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
	<mailto:bitcoin-development-request@lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development>
List-Post: <mailto:bitcoin-development@lists.sourceforge.net>
List-Help: <mailto:bitcoin-development-request@lists.sourceforge.net?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
	<mailto:bitcoin-development-request@lists.sourceforge.net?subject=subscribe>
X-List-Received-Date: Fri, 18 Oct 2013 23:58:35 -0000

some fairly old wordlist solver code of mine:

https://people.xiph.org/~greg/wordlist.visual.py

it has a 52x52 letter visual similarity matrix in it (along with a citation)

On Fri, Oct 18, 2013 at 4:52 PM, jan <jan.marecek@gmail.com> wrote:
>
> The words 'public', 'private' and 'secret' could be confusing when
> encoding public and private keys. eg. a private key that begins with
> the word 'public'.
>
> I think avoiding words that could look similar when written down would
> be a good idea aswell. I searched for words that only differ by the
> letters c & e, g & y, u & v and found the following:
>
> car ear
> cat eat
> gear year
> value valve
>
> Other combinations could potentially be problematic depending on the
> handwriting style: ft, ao, ij, vy, possibly even lt and il?
>
> I've included the search utility I used below.
>
>
> #include <stdbool.h>
> #include <string.h>
> #include <stdio.h>
>
> char *similar_char_pairs[] = { "ce", "gy", "uv", NULL };
>
> bool is_similar_char(char c1, char c2)
> {
>   char **pairs = similar_char_pairs;
>   do {
>     char *p = *pairs;
>     if ((c1 == p[0] && c2 == p[1]) ||
>         (c1 == p[1] && c2 == p[0]))
>       return true;
>   } while (*++pairs);
>
>   return false;
> }
>
> bool print_words_if_similar(char *word1, char *word2)
> {
>   /* reject words of different lengths */
>   if (strlen(word1) != strlen(word2))
>     return false;
>
>   size_t i, similarcount = 0;
>
>   for (i = 0; i < strlen(word1); i++) {
>     /* skip identical letters */
>     if (word1[i] == word2[i])
>       continue;
>
>     /* reject words that don't match */
>     if (is_similar_char(word1[i], word2[i]) == false)
>       return false;
>
>     similarcount++;
>   }
>
>   /* reject words with more than 1 different letter */
>   //if (similarcount > 1)
>   //  return false;
>
>   printf("%s %s\n", word1, word2);
>
>   return true;
> }
>
> int main(void)
> {
>   /* english.txt is assumed to exist in the working directory
>      download from:
>      https://github.com/trezor/python-mnemonic/blob/master/mnemonic/wordlist/english.txt */
>   FILE* f = fopen("english.txt", "r");
>   if (!f) {
>     fprintf(stderr, "failed to open english.txt\n");
>     return 1;
>   }
>
>   /* read in word list, assumes one word per line */
>   #define MAXWORD 16
>   char wordlist[2048][MAXWORD];
>   int word = 0;
>   while (fgets(wordlist[word], MAXWORD, f)) {
>     /* strip trailing whitespace, assumes no leading whitespace */
>     char *ch = strpbrk(wordlist[word], " \n\t");
>     if (ch)
>       *ch = '\0';
>     word++;
>   }
>
>   if (word != 2048) {
>     fprintf(stderr, "word list incorrect length\n");
>     return 1;
>   }
>
>   /* check each word for similarity against every other word */
>   int i, j, count = 0;
>   for (i = 0; i < 2048; i++) {
>     for (j = i+1; j < 2048; j++) {
>       if (print_words_if_similar(wordlist[i], wordlist[j]))
>         count++;
>     }
>   }
>
>   printf("%d matches\n", count);
>
>   return 0;
> }
>
> ------------------------------------------------------------------------------
> October Webinars: Code for Performance
> Free Intel webinars can help you accelerate application performance.
> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
> the latest Intel processors and coprocessors. See abstracts and register >
> http://pubads.g.doubleclick.net/gampad/clk?id=60135031&iu=/4140/ostg.clktrk
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development