{"id":3891,"date":"2023-04-18T06:33:00","date_gmt":"2023-04-17T21:33:00","guid":{"rendered":"https:\/\/matoken.org\/blog\/?p=3891"},"modified":"2023-04-18T18:34:42","modified_gmt":"2023-04-18T09:34:42","slug":"openssh-ed25519-vanity-adress","status":"publish","type":"post","link":"https:\/\/matoken.org\/blog\/2023\/04\/18\/openssh-ed25519-vanity-adress\/","title":{"rendered":"OpenSSH ED25519 \u306e Vanity Adress \u3092\u63a2\u3057\u3066\u307f\u308b"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\u4ee5\u524d\u4f55\u7a2e\u985e\u304b\u306eVanity Adress \u3092\u6398\u3063\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/matoken.org\/blog\/2023\/03\/01\/nostr-vanity-adress\/\">Nostr \u306e Vanity address \u3092\u6398\u308b \u2013 matoken\u2019s meme<\/a><\/li>\n<li><a href=\"https:\/\/matoken.org\/blog\/2020\/06\/12\/calculate-the-address-to-use-in-tor-hidden-service-vanity-addresses\/\">tor\u306ehidden service\u3067\u4f7f\u3046\u30a2\u30c9\u30ec\u30b9\u3092\u8a08\u7b97\u3059\u308b(Vanity Addresses) \u2013 matoken\u2019s meme<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>\u3075\u3068SSH\u9375\u306eVanity Adress \u306f\u3069\u3046\u3060\u308d\u3046\u3068\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<p><!--more--><\/p>\n<div class=\"paragraph\">\n<p>\u9375\u306fEd25519 \uff0e\u9375\u30da\u30a2\u306e\u516c\u958b\u9375\u304c\u3044\u3044\u611f\u3058\u3060\u3068\u826f\u3055\u305d\u3046\u306a\u6c17\u304c\u3057\u307e\u3059\uff0e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_openssh_ssh_keygen\">OpenSSH ssh-keygen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\u307e\u305a\u306fOpenSSH \u306e <code>ssh-keysign<\/code> \u3067\u4f5c\u3063\u3066\u307f\u307e\u3059\uff0e\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3044\u305a\u308c\u304b\u306e <code>mat0<\/code> \u304c\u898b\u3064\u304b\u308b\u307e\u3067\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ umask 277; no=0; tmp=`mktemp -d -p ~\/tmp\/`; chmod 700 ${tmp}; while true;do no=$(($no + 1)); ssh-keygen -t ed25519 -f ${tmp}\/${no} -N '' -C '' &gt; \/dev\/null; grep -i -E m[a@]t[o0] ${tmp}\/${no}.pub &amp;&amp; echo ${tmp}\/${no} &amp;&amp; break; done\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOt6L8+9eF3T8o\/M4BnDVZ5F7SVdPmat0hlM8s\/8zV\/r\n\/home\/matoken\/tmp\/tmp.rGb5eSpEaJ\/26016<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>26016\u9375\u30da\u30a2\u3092\u751f\u6210\u3057\u305f\u3068\u3053\u308d\u3067186\u79d2\u307b\u3069\uff0c\u5927\u4f53140.6keys\/sec \u304f\u3089\u3044\uff0e\u9045\u3044\u611f\u3058?vmstat \u3084top \u3092\u898b\u3066\u3082cpu \u306f\u3042\u307e\u308a\u4f7f\u3048\u3066\u3044\u306a\u3044\u611f\u3058\u3067\u3059\uff0e<br \/>\n<code>-a 1<\/code> (default:16) \u306b\u3059\u308b\u3068160.8\/keys\/sec \u3068\u5c11\u3057\u65e9\u304f\u306a\u308a\u307e\u3057\u305f\u304c\u9375\u3092\u76d7\u307e\u308c\u305f\u5834\u5408\u306e\u5f37\u5ea6\u304c\u4e0b\u304c\u308b\u3068\u601d\u3046\u306e\u3067\u3084\u3081\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_ssh_keygen_ed25519_vanity\">ssh-keygen-ed25519-vanity<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>tool \u3092\u63a2\u3057\u3066\u307f\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/github.com\/ionathanch\/ssh-keygen-ed25519-vanity\">GitHub &#8211; ionathanch\/ssh-keygen-ed25519-vanity: Generate a vanity EdDSA SSH key for fun.<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">clone&amp;build<\/div>\n<div class=\"content\">\n<pre>$ git clone https:\/\/github.com\/ionathanch\/ssh-keygen-ed25519-vanity\n$ cd ssh-keygen-ed25519-vanity\n$ make<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">run<\/div>\n<div class=\"content\">\n<pre>$ .\/vanity mato\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEHmibZNyKuT\/GO9rloS8qmatoFOZ4N7fJcRSOPCwsky\n-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZWQyNTUxOQAAACBB5om2Tcirk\/xjva5aEvKpmraBTmeDe3yXEUjjwsLJMgAAAIjwyswa8MrMGgAAAAtzc2gtZWQyNTUxOQAAACBB5om2Tcirk\/xjva5aEvKpmraBTmeDe3yXEUjjwsLJMgA\nAAEBro42f\/ycDTNvMw3JHIGD5dzg+VVgshQw+RWIhN\/I2WEHmibZNyKuT\/GO9rloS8qmatoFOZ4N7fJcRSOPCwskyAAAAAAECAwQF\n-----END OPENSSH PRIVATE KEY-----<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>shell \u3067ssh-keygen \u3092\u56de\u3059\u3088\u308a\u901f\u305d\u3046\u3067\u3059\uff0e\u66f4\u306bREADME \u306b\u306fmoreutils \u306eparallel \u3092\u4f7f\u3063\u3066\u4e26\u5217\u5b9f\u884c\u3059\u308b\u65b9\u6cd5\u3082\u66f8\u304b\u308c\u3066\u3044\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ time parallel -n 0 .\/vanity vanity -- 1 2 3 4<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u4ee5\u4e0b\u306fREADME \u306b\u3042\u3063\u305f\u6587\u5b57\u6570\u306b\u3088\u308a\u3069\u306e\u304f\u3089\u3044\u6642\u9593\u304c\u304b\u304b\u308b\u304b\u306e\u76ee\u5b89\u3067\u3059\uff0e<\/p>\n<\/div>\n<div class=\"quoteblock\">\n<blockquote>\n<div class=\"paragraph\">\n<p>Rough performance stats<br \/>\nObviously since it\u2019s brute force the times are probabilistic, but this gives you an idea of how feasible it would be to find your desired number of characters.<\/p>\n<\/div>\n<table  class=\"tableblock frame-all grid-all stretch table table-hover\" >\n<colgroup>\n<col style=\"width: 50%;\"\/>\n<col style=\"width: 50%;\"\/>\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Substring<\/th>\n<th class=\"tableblock halign-left valign-top\">Time (s)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">a<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">0.002<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">ar<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">0.015<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">ars<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">0.501<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">arso<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">3.753<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">arson<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">abandon all hope ye who seek five sequential characters<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/blockquote>\n<\/div>\n<div class=\"paragraph\">\n<p>\u5927\u5206\u901f\u3044\u3088\u3046\u306a\u6c17\u304c\u3057\u307e\u3059\u304c\u30a2\u30c9\u30ec\u30b9\u306e\u6307\u5b9a\u304c\u56fa\u5b9a\u306a\u3088\u3046\u3067\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3069\u3063\u3061\u3067\u3082\u3068\u304b\u4ee3\u66ff\u8a18\u53f7\u3067\u3082\u3044\u3044\u306a\u3069\u3068\u3044\u3063\u305f\u3053\u3068\u304c\u51fa\u6765\u306a\u305d\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_vanity_keygen\">vanity-keygen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\u307e\u305f\u5225\u306e\u3082\u306e\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/github.com\/pcarrier\/vanity-keygen\">GitHub &#8211; pcarrier\/vanity-keygen: Get your vanity SSH ed25519 keypair<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">clone&amp;build<\/div>\n<div class=\"content\">\n<pre>$ go install github.com\/pcarrier\/vanity-keygen@latest\n$ vanity-keygen -h\nUsage of vanity-keygen:\n  -cpuprofile string\n        write cpu profile to file\n  -threads int\n        number of threads to run (default 4)<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">run<\/div>\n<div class=\"content\">\n<pre>$ time vanity-keygen -threads `nproc` [mM][aA@][tT][oO0]\n2023\/04\/05 08:30:06 Looking for a public key matching [mM][aA@][tT][oO0]\n2023\/04\/05 08:30:06 Public key:\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA2rzJZSoqwrVF\/Pf2FzKgfL\/eMATOI\/V7bjdmqkGV5B\n2023\/04\/05 08:30:06 Private key:\n-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtz\nc2gtZWQyNTUxOQAAACANq8yWUqKsK1Rfz39hcyoHy\/3jAEziP1e243ZqpBleQQAA\nAIiaywRCmssEQgAAAAtzc2gtZWQyNTUxOQAAACANq8yWUqKsK1Rfz39hcyoHy\/3j\nAEziP1e243ZqpBleQQAAAEDBsKpzquKe0\/QTheaoVSChK8gF6d38u5mwrtqihfMY\n6A2rzJZSoqwrVF\/Pf2FzKgfL\/eMATOI\/V7bjdmqkGV5BAAAAAAECAwQF\n-----END OPENSSH PRIVATE KEY-----\n\nreal    0m0.331s\nuser    0m0.652s\nsys     0m0.048s<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u3053\u306e\u30c4\u30fc\u30eb\u306f\u30b9\u30ec\u30c3\u30c9\u6570\u3082\u6307\u5b9a\u3067\u304d\u308b\u3057\uff0c\u30a2\u30c9\u30ec\u30b9\u306e\u6307\u5b9a\u3082\u67d4\u8edf\u306a\u306e\u3067\u826f\u3055\u305d\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ vanity-keygen aaaaa\n2023\/04\/05 08:30:12 Looking for a public key matching aaaaa\n2023\/04\/05 08:30:13 Generated 71,000 keypairs (69,788 Hz)\n2023\/04\/05 08:30:14 Generated 141,000 keypairs (70,310 Hz)\n2023\/04\/05 08:30:15 Generated 212,000 keypairs (70,454 Hz)\n2023\/04\/05 08:30:16 Generated 284,000 keypairs (70,792 Hz)\n2023\/04\/05 08:30:17 Generated 356,000 keypairs (71,040 Hz)<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u63a2\u7d22\u4e2d\u306b\u3069\u306e\u304f\u3089\u3044\u306e\u9375\u3092\u751f\u6210\u3057\u305f\u304b\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u826f\u3055\u305d\u3046\u306a\u306e\u3067Tor \u306e\u3068\u304d\u306e\u3088\u3046\u306b\u5c11\u96fb\u529b\u306aSBC\u306eRaspberry Pi 3 modelB \u3067\u3082\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">Raspberry Pi OS armhf \u5411\u3051\u306bamd64 \u74b0\u5883\u3067\u30af\u30ed\u30b9\u30d3\u30eb\u30c9<\/div>\n<div class=\"content\">\n<pre>$ GOARCH=arm GOARM=7 go build .\n$ file .\/vanity-keygen\n.\/vanity-keygen: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, Go BuildID=Z_Cr4XM48GAIHSA-MQng\/2wFeSpgr5k0WPASNS4ho\/3FEwAtva33LS2ByXLcjP\/0WSk_fEc6xXCDZEo89yH, with debug_info, not stripped<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">Pi3B\u3067\u5b9f\u884c<\/div>\n<div class=\"content\">\n<pre>$ .\/vanity-keygen -threads 4 aaaa\n2023\/04\/05 08:22:58 Looking for a public key matching aaaa\n2023\/04\/05 08:22:59 Generated 0 keypairs (0 Hz)\n2023\/04\/05 08:23:00 Generated 4,000 keypairs (1,991 Hz)\n2023\/04\/05 08:23:01 Generated 4,000 keypairs (1,332 Hz)\n2023\/04\/05 08:23:02 Generated 8,000 keypairs (1,990 Hz)\n2023\/04\/05 08:23:03 Generated 8,000 keypairs (1,598 Hz)\n^C\n$ cat \/proc\/device-tree\/model &amp;&amp; echo\nRaspberry Pi 3 Model B Rev 1.2<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2026\u2026\u5927\u5206\u9045\u304f\u306a\u308a\u307e\u3057\u305f\uff0ePC\u3067\u5b9f\u884c\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_\u307e\u3068\u3081\">\u307e\u3068\u3081<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\u6c17\u306b\u5165\u3063\u305f\u9375\u304c\u51fa\u6765\u305f\u3089\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u3092\u8a2d\u5b9a\u3057\u305f\u308a\uff0c<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ ssh-keygen -p -f .\/key\nKey has comment ''\nEnter new passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved with the new passphrase.<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u30b3\u30e1\u30f3\u30c8\u3092\u66f8\u304d\u63db\u3048\u305f\u308a\u3057\u307e\u3057\u3087\u3046\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ ssh-keygen -c -f .\/key\nEnter passphrase:\nOld comment:\nNew comment: vanity\nComment 'vanity' applied<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Tor \u306eVanity adoress \u306a\u3093\u304b\u306b\u6bd4\u3079\u308b\u3068\u3042\u307e\u308a\u76ee\u7acb\u305f\u306a\u3044\u3067\u3059\u304c\uff0chostkey \u3084GitHub\/Lab \u306a\u3069\u3067\u4e00\u822c\u516c\u958b\u3057\u3066\u3044\u308b\u9375\u306b\u4f7f\u3046\u306e\u306f\u3042\u308a\u3067\u306f\u3068\u601d\u3044\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/matoken.org\/blog\/2019\/03\/31\/ssh-public-key-import-function-from-ubuntu-server-installer-github-launchpad\/\">Ubuntu Server \u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u306e Github, Launchpad \u304b\u3089\u306e ssh\u516c\u958b\u9375\u30a4\u30f3\u30dd\u30fc\u30c8\u6a5f\u80fd \u2013 matoken\u2019s meme<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_\u74b0\u5883\">\u74b0\u5883<\/h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ cpu-info\nPackages:\n        0: Intel Core i5-7300U\nMicroarchitectures:\n        2x Sky Lake\nCores:\n        0: 2 processors (0-1), Intel Sky Lake\n        1: 2 processors (2-3), Intel Sky Lake\nLogical processors (System ID):\n        0 (0): APIC ID 0x00000000\n        1 (2): APIC ID 0x00000001\n        2 (1): APIC ID 0x00000002\n        3 (3): APIC ID 0x00000003\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Debian GNU\/Linux 12 (bookworm)\nRelease:        12\n$ arch\nx86_64<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u524d\u4f55\u7a2e\u985e\u304b\u306eVanity Adress \u3092\u6398\u3063\u3066\u307f\u307e\u3057\u305f\uff0e Nostr \u306e Vanity address \u3092\u6398\u308b \u2013 matoken\u2019s meme tor\u306ehidden service\u3067\u4f7f\u3046\u30a2\u30c9\u30ec\u30b9\u3092\u8a08\u7b97\u3059\u308b(Vani [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[739,7,6,90],"tags":[72,767],"class_list":["post-3891","post","type-post","status-publish","format-standard","hentry","category-bookworm","category-debian-linux","category-linux","category-testing","tag-openssh","tag-vanity-adress"],"_links":{"self":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/3891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/comments?post=3891"}],"version-history":[{"count":1,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/3891\/revisions"}],"predecessor-version":[{"id":3892,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/3891\/revisions\/3892"}],"wp:attachment":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/media?parent=3891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/categories?post=3891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/tags?post=3891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}