IOTA:Underlying Concept and Implementation of Multisig. MAMの記事と合わせて、Tangleの柔軟性が伝わって欲しい。
今まで書いた記事の中でもIOTAの基礎部分は以下の3つで説明した。
IOTA:【入門】トランザクション大解剖!ウォレットは裏で何をやっているか。 IOTA:【技術解説】送金APIから紐解くBundleの全容。 IOTA【技術解説】署名と承認。 - 改訂版
Thinking of transfering large amount of money, especially the ones that imvolve exchange level of transactions, it is a risk to have one seed be responsible for the transfers. Multisig is used to initiate higher secure transfers by asking severail co-signers. Even though multisig transfers are created in a way different than ordinary individual transfers, when attached to tangle, is appears to be no different, and people cannot distingish multisigly attached transfer from others.
The most essential idea in creating multisig transfer comes from the very basic of address generation mechanism. Especially, 'security' parameter is closely related and applied to multisig. Below is instannt overview of generating address. Address is only the final product that comes from Seed、Private Key、through digests.
Seed is arbitrary 81 tryte length string that users freely can choose. But, Private Key is not. It's just a result gotten after hashing Seed. Following is a simple experiment that generates different private key with different security
from the same seed.
var Signing = require('../lib/crypto/signing/signing');
var Converter = require('../lib/crypto/converter/converter');
var seed = 'ABMUSHI9TEST';
// index is fixed, in this example.
var index = 0;
// return Private Key
var getKey = function(seed,index,security){
var key_trits = Signing.key(Converter.trits(seed),index,security); // private key
var key = Converter.trytes(key_trits); // convert to tryte
return key;
}
// show different private key with different security level(1,2, and 3)
for(var s=1;s<4;s++){
var key = getKey(seed,index,s);
console.log('- - - - - - - - - - - - - - - - - - - - -');
console.log('security: ',s);
console.log('private key length: ',key.length);
console.log('private key: ',key);
}
- - - - - - - - - - - - - - - - - - - - -
security: 1
private key length: 2187
private key: XUXGEZIDZJNUTRGHLXZLMTHQZIPGVCEDYZCYZPCGSXRRZTPFOCFFOC9W9ALKIQCVGZNVZJKNVKIEYHPWBIANTSWGFXQBIMBQLXNTGXKH9MSZYQUMDRNVWZVDBWLJZCMLAWJHUTJZARVELQEXIDCTLTSFYMVVLMNXFYUUGB9TVVEOPV9FFKQZTQONILV9FJCWZDRRITITAPTSOXRXCPWYJKNFONXJLFOIHKJWBWGKYYNUTKC9DWAMXSLFRBGMWKUIDD9CTJFKXEKEXMHWSWAR9GNGKAMHYQNOPLJORZFWHIXEGBBILATMSKHGN99ERIMNHQDZPBMOJOGNWCEBTQPABBRKOPXPYKFHUZDWSHWNDTLTUBFTGVGCYZYFQDUMRJ9IQMVFCZJZJHRVYREOEFNPDTJKMYLOKPKKLMEEEDIFHKAYBVEMXL9OWMEYMQYBVEONSTNWEPCSP9MNZNBOLICIHXYIQMBWALHDQNWCJD9LMGHSJWEHAWIIHE9GHRRSBMLQKWSQNCMAEOPHZRICNMTTYXH9KHBOCDADSECURFTE9YKGTVZHYFYHVHDDHL9Q9JJTTJJUWIZWIMTDAUI9DTFJENYLLLRQ9XIWMCQ9BPZRKZVLXTO9MCQCEALKCNVWGROTJNFVSLTYDMISCOQU9VRVNLBGGEAAR9XOYQOOKYXQJJTROWVQYBKO9URAFTMUW9ABBBCOABUO9GFDZBGACBLQQNYQYAIUKBVJGWRBUZYOJTIPO9GGSEJBUGNQPXYBIMMFPHNVOLTBGKP9AMGBFALZJLXQZMWZKAJURQRRKSKAYWQERERQCOQFABBAXL9MRCCRVFYMLUQATBFHLNISISIXKVYCEPMZKD9HSOKIL9YNVYVIVJHYNVDQEQ9HUZZHPDURFYBDUWRKCCHQDESPHZRPJOOWAUWCX9K9QYSROEDCTVWLLGECJDWI9KEZZAVKRTRHSHPTUQJOLNCBSDQMYTNFWGMYOIRS9RIQFABDTDKRTSZZSKVUUOIUORSDZGNQYXHIOFCYVQHFMBXFXRGLYRPZYWIRPRZXDRBIENSMSJVJMMUMHZPXGQHLDWKWCLVIYL9MQHMUXHHZYDFI9AAZOXFEGY9TTZMYWUVZXCJBWRSPXNTIZXCG9DSFGAHVQHIMYTZ9FFMOIGWVNTFDYNJDZDCGFMQFNHYXJMXLKSREUSAWVCWLUTBUNK9WXTWGDWZXSQCWCCHEZWZQWFRPEPUYDXWUTIVMITLRVWDBKHERHITJKBTKZDLWVKSJSUPSQJUEPKC9QTJIGKQGPRMRUHIWYPYSHCYUQXQRN9IJBDPRLYTADHVFQRBZNOPNBWXFLQIOMEMXFGMZ9SBVBTHHXFHDIIRKSGMZAPIKBXYDCEAQLSTTXDPQ9ASORJUZLMNOKQNXMJCTH9KZLBPNWVMBJSQXDEMFWWBNVQZXCJYRXEMBSSGWLVNOIEIZD9EJEWGHICEXOJZAEHJTJHTENPSZFERQBJZPX9NQOHGBYSUMKUXZDJ9FHEZUW9SMQHWMMNRJTKSAMWGKMDWCMB9ARCODYEXSRVBDFWXDHMEY9CT9QXTZNELVWSOHSJYPMQGKVFRNMUNQAPTVMVVFVNNBBBQAMOWSMETCHHMRWLXWWOEMFOEAZWMPLGSUZRS9PIUHMZOXBQKEQUBPRZICPQCSEVUMLLKTWC9VGZJEXDBAXVTMYYSACYQVJTIVIEZDI9SUHVLFKZEJAYEEYEBFCQFMIZZIATDDBNZQESSNXVEYFJRJSHHGQQDRGVDVLYMQKSRMOWMSNIISJYGIAWJKEHMWKDYEAEAETSST9JMYNC9KI9MMZGNADIJRYDKLXEFUZTMJEB9DBSPVOXVXLMGCXDXRQTZRUWLMHCXTSRZNGZDAFF9IYUZWISUBGNUEYTOPHDHFRJOVUVHUXIHLJHMJG9SSHMLRUULBJYGKHUQYAQOT9GHTXX9LCZLLEIMXYKIZHGSVHGSPA9GSKLLMIJ9WYL9DLODOWNXTMHJFZBIOIRVRBZIPAYDNRLZODNJQWATHOWMGACVPLDEANJXFETDCVFDOFGECVOWWXJQJEGAACIZBYFHDMIIMZHRMGJZSJDTVCUPDZKDFHWKVDZB9NILRXDGPHVVQBGGMDXDEVDMRXOTRJSNIEMXJVTDYHGTOLUIPSBCERYJSUQDGLQWVCBPPCLSVGVD
- - - - - - - - - - - - - - - - - - - - -
security: 2
private key length: 4374
private key: XUXGEZIDZJNUTRGHLXZLMTHQZIPGVCEDYZCYZPCGSXRRZTPFOCFFOC9W9ALKIQCVGZNVZJKNVKIEYHPWBIANTSWGFXQBIMBQLXNTGXKH9MSZYQUMDRNVWZVDBWLJZCMLAWJHUTJZARVELQEXIDCTLTSFYMVVLMNXFYUUGB9TVVEOPV9FFKQZTQONILV9FJCWZDRRITITAPTSOXRXCPWYJKNFONXJLFOIHKJWBWGKYYNUTKC9DWAMXSLFRBGMWKUIDD9CTJFKXEKEXMHWSWAR9GNGKAMHYQNOPLJORZFWHIXEGBBILATMSKHGN99ERIMNHQDZPBMOJOGNWCEBTQPABBRKOPXPYKFHUZDWSHWNDTLTUBFTGVGCYZYFQDUMRJ9IQMVFCZJZJHRVYREOEFNPDTJKMYLOKPKKLMEEEDIFHKAYBVEMXL9OWMEYMQYBVEONSTNWEPCSP9MNZNBOLICIHXYIQMBWALHDQNWCJD9LMGHSJWEHAWIIHE9GHRRSBMLQKWSQNCMAEOPHZRICNMTTYXH9KHBOCDADSECURFTE9YKGTVZHYFYHVHDDHL9Q9JJTTJJUWIZWIMTDAUI9DTFJENYLLLRQ9XIWMCQ9BPZRKZVLXTO9MCQCEALKCNVWGROTJNFVSLTYDMISCOQU9VRVNLBGGEAAR9XOYQOOKYXQJJTROWVQYBKO9URAFTMUW9ABBBCOABUO9GFDZBGACBLQQNYQYAIUKBVJGWRBUZYOJTIPO9GGSEJBUGNQPXYBIMMFPHNVOLTBGKP9AMGBFALZJLXQZMWZKAJURQRRKSKAYWQERERQCOQFABBAXL9MRCCRVFYMLUQATBFHLNISISIXKVYCEPMZKD9HSOKIL9YNVYVIVJHYNVDQEQ9HUZZHPDURFYBDUWRKCCHQDESPHZRPJOOWAUWCX9K9QYSROEDCTVWLLGECJDWI9KEZZAVKRTRHSHPTUQJOLNCBSDQMYTNFWGMYOIRS9RIQFABDTDKRTSZZSKVUUOIUORSDZGNQYXHIOFCYVQHFMBXFXRGLYRPZYWIRPRZXDRBIENSMSJVJMMUMHZPXGQHLDWKWCLVIYL9MQHMUXHHZYDFI9AAZOXFEGY9TTZMYWUVZXCJBWRSPXNTIZXCG9DSFGAHVQHIMYTZ9FFMOIGWVNTFDYNJDZDCGFMQFNHYXJMXLKSREUSAWVCWLUTBUNK9WXTWGDWZXSQCWCCHEZWZQWFRPEPUYDXWUTIVMITLRVWDBKHERHITJKBTKZDLWVKSJSUPSQJUEPKC9QTJIGKQGPRMRUHIWYPYSHCYUQXQRN9IJBDPRLYTADHVFQRBZNOPNBWXFLQIOMEMXFGMZ9SBVBTHHXFHDIIRKSGMZAPIKBXYDCEAQLSTTXDPQ9ASORJUZLMNOKQNXMJCTH9KZLBPNWVMBJSQXDEMFWWBNVQZXCJYRXEMBSSGWLVNOIEIZD9EJEWGHICEXOJZAEHJTJHTENPSZFERQBJZPX9NQOHGBYSUMKUXZDJ9FHEZUW9SMQHWMMNRJTKSAMWGKMDWCMB9ARCODYEXSRVBDFWXDHMEY9CT9QXTZNELVWSOHSJYPMQGKVFRNMUNQAPTVMVVFVNNBBBQAMOWSMETCHHMRWLXWWOEMFOEAZWMPLGSUZRS9PIUHMZOXBQKEQUBPRZICPQCSEVUMLLKTWC9VGZJEXDBAXVTMYYSACYQVJTIVIEZDI9SUHVLFKZEJAYEEYEBFCQFMIZZIATDDBNZQESSNXVEYFJRJSHHGQQDRGVDVLYMQKSRMOWMSNIISJYGIAWJKEHMWKDYEAEAETSST9JMYNC9KI9MMZGNADIJRYDKLXEFUZTMJEB9DBSPVOXVXLMGCXDXRQTZRUWLMHCXTSRZNGZDAFF9IYUZWISUBGNUEYTOPHDHFRJOVUVHUXIHLJHMJG9SSHMLRUULBJYGKHUQYAQOT9GHTXX9LCZLLEIMXYKIZHGSVHGSPA9GSKLLMIJ9WYL9DLODOWNXTMHJFZBIOIRVRBZIPAYDNRLZODNJQWATHOWMGACVPLDEANJXFETDCVFDOFGECVOWWXJQJEGAACIZBYFHDMIIMZHRMGJZSJDTVCUPDZKDFHWKVDZB9NILRXDGPHVVQBGGMDXDEVDMRXOTRJSNIEMXJVTDYHGTOLUIPSBCERYJSUQDGLQWVCBPPCLSVGVDYSCKGXUBGYRAZJDAQYCNFWZSLKOYJSRCGVJZHTSXMFBKCDNBJR9HKEEE9ALGASHEYLABOUKKUYCGEWLNZRQIBXWMIPLDXZXDJNVTOCLSQUPTEQIFLCSWUJOLWI9TWMSF9HZWBZCIYOQITAAMIBHQGDJKSXWRHPLYICVYOKYZUXFVUCZUTRBSKTKOQYURAXLLPNJNY9QVCQBG9ZNEJBXCTFHROGTXL99PWAPFKJOBIE9FEICTTX9GOUFOCABPFRDFOHRQWYLMDJYWPTUULBFBTMEXLNWCHVPEASRREAQ9TXKRJRMKPDPHPKOEKCCHOR9BDGZ9RUEXBVJVBWMKUEZNXEKQYZZCHAWPFKUTWCIDM9JHNXUJOS9HDDZSQZMIUFCHJYJHTOYKRPYP9DRGNYDRDCYKNE9BZQONWFHORWTVAKUIGX9SAPJTAEBOSUHIAPUMDNPMWLHGPPKFZGWBLLFATYUZOK9HRJBDYPHIEDGMNVRDBJCKGQOOQFBVHBGLSVHPWCROQZANFBJGW9QEE9WVTUPFMULPKGKHXSBGPJSNXVPXVGYFYAITGJAJYOWHNHGSKVCK9SKCOYHRGGSDYO9ILEPPZLXECTTI9GGFXNN9GOWUSGOLEDJ9XHOAVZIKJRPLTALVQG9DRTYNS9ZUUTZAJHJSPCKMKKQKQKSTDINPJVXYDYAHDGFWINGFKXFW9DSHTTABQNVHD9ZPCFDISQNVL9NHDYMPPNQJUVWIHXUMVJ9ZXZKIRHQQWQVRMTOYAPOWHFXMGCXJFTJFJBMFLAJHHEURVHPRQNDOXQTGBKU9XDKHVIVCCLWDSBIDLCOWMEJJMXDONHHTUANKKOYFURF9DTVAAFQEMCBVZBQZMJQIFHRISLFXGQMUMZNYNOXYDDYWFHVIQJNJVKVWXUTWBMTBXQSCWXDTZZQVWELRFLAGXNXSDPKKMKUIHN9SSOHKNZAZCOYGUKFXJIDDLECPVINKENDMKWJLGCWKZPPQQAAONUOYFVTWVBTFDBUYYHHDZUCXMVNNUVBOGD9KOIMONVTZBGFX9FRVCTNRBWJVJSJOUZBXBNTKQUVZIOEUDNOL9WYUG9FLKJVHOJWBVLMKWMJPRMQDTEQLXAFECHPZYHPQZFSEPDNQGPRMITSQCQFMAZSSAFOKNRPMUK9JOKAKHUZAZYIURHQYUGAVNHN9TXJLDFWSJSWEAEWQCGLLR9ZDBRXNNZWWPDYF9LWFKMPHLYLHIWWCEXFJOCWXWTPK9ICCLEOOKAXWDPK9P9FWXSSRZBKRNWZPJYYWYYSVCODB9JVLFH9E9YOTUSGHRFGFGSVDHX9BYBTGLYCTRKOEVUFVWMIPRPWCMLNBTPG9CB9NNLQCYCIF9PVUCZ9OZRQDEIIJOWWCKZEYHCE999WPXMUFQSISGJCHZVTLPFHSYHJXHTVBIMEUXXJWUWQHNNQPHV9CVSQQRCMSRWPKRTYZLBOKZXTCFMDHOVXITWWHEJLYPYRNQTLXBUNSSUAASYVKLRTZZWMVYCKBNVDKSLO9DXCMOITHA9DCUSOIKWNHI9QJKLVKGIC9HYYWSBYD9OJQRHY9UPJULCAYZQTHSATYKTPEWAVTRTNO9VYGLEKUYHOLMBHWNRSKYTOPDDFQNDTOSBDWIAVWRAWGXFLJCL9LBJNVZHVZVKLRKIYDVMZSDHKZIPPI9EWEAJ9NUPHHR9KAWUNS9NT9JJDWPIUCNBYDLVCTBFACTETDVGZVZSDKXQXUBKXAPULERN9CIYATKGKPJAUSJ9YNRVBCLGRZZYDVJGWA9IVQBASIWVZGHTKNTEKDXBYZXQQTSXYOSEEHB9YJDKXPLIUQSSWBHKIGMTKRXUAELSJZXRGMXJWXCWVJBCXSZWVPXWHJWXBOFGZBIWZHHUFULCKHSDKJRKZZ9FPTUCBHESQ9DNIGWEZGWTHQCOMHXGW9AGMYHBQ9WSLIRGPUYIAAOKYZVNDRKBFWGYRSJLIAEXLXQPFGZTQPHNFEUWQLNXPDYXQOZ9MUAUH9JU9SWCJAAWRZZXKWYFFOGRPPOQJQPXGNUPOXLRRYZPDDTHMKVAXPZPADZKENHZHACAZZHMCAFVC9QVQXPKSDDLLSD9NQLZRPKUKXZZYRKSTKHYK9LZIYXCQXIKMNJKYBWLPG9GSEJPKGIFYNTZTOINIZBBHMUJTYGMAJXZZOYXB
- - - - - - - - - - - - - - - - - - - - -
security: 3
private key length: 6561
private key: XUXGEZIDZJNUTRGHLXZLMTHQZIPGVCEDYZCYZPCGSXRRZTPFOCFFOC9W9ALKIQCVGZNVZJKNVKIEYHPWBIANTSWGFXQBIMBQLXNTGXKH9MSZYQUMDRNVWZVDBWLJZCMLAWJHUTJZARVELQEXIDCTLTSFYMVVLMNXFYUUGB9TVVEOPV9FFKQZTQONILV9FJCWZDRRITITAPTSOXRXCPWYJKNFONXJLFOIHKJWBWGKYYNUTKC9DWAMXSLFRBGMWKUIDD9CTJFKXEKEXMHWSWAR9GNGKAMHYQNOPLJORZFWHIXEGBBILATMSKHGN99ERIMNHQDZPBMOJOGNWCEBTQPABBRKOPXPYKFHUZDWSHWNDTLTUBFTGVGCYZYFQDUMRJ9IQMVFCZJZJHRVYREOEFNPDTJKMYLOKPKKLMEEEDIFHKAYBVEMXL9OWMEYMQYBVEONSTNWEPCSP9MNZNBOLICIHXYIQMBWALHDQNWCJD9LMGHSJWEHAWIIHE9GHRRSBMLQKWSQNCMAEOPHZRICNMTTYXH9KHBOCDADSECURFTE9YKGTVZHYFYHVHDDHL9Q9JJTTJJUWIZWIMTDAUI9DTFJENYLLLRQ9XIWMCQ9BPZRKZVLXTO9MCQCEALKCNVWGROTJNFVSLTYDMISCOQU9VRVNLBGGEAAR9XOYQOOKYXQJJTROWVQYBKO9URAFTMUW9ABBBCOABUO9GFDZBGACBLQQNYQYAIUKBVJGWRBUZYOJTIPO9GGSEJBUGNQPXYBIMMFPHNVOLTBGKP9AMGBFALZJLXQZMWZKAJURQRRKSKAYWQERERQCOQFABBAXL9MRCCRVFYMLUQATBFHLNISISIXKVYCEPMZKD9HSOKIL9YNVYVIVJHYNVDQEQ9HUZZHPDURFYBDUWRKCCHQDESPHZRPJOOWAUWCX9K9QYSROEDCTVWLLGECJDWI9KEZZAVKRTRHSHPTUQJOLNCBSDQMYTNFWGMYOIRS9RIQFABDTDKRTSZZSKVUUOIUORSDZGNQYXHIOFCYVQHFMBXFXRGLYRPZYWIRPRZXDRBIENSMSJVJMMUMHZPXGQHLDWKWCLVIYL9MQHMUXHHZYDFI9AAZOXFEGY9TTZMYWUVZXCJBWRSPXNTIZXCG9DSFGAHVQHIMYTZ9FFMOIGWVNTFDYNJDZDCGFMQFNHYXJMXLKSREUSAWVCWLUTBUNK9WXTWGDWZXSQCWCCHEZWZQWFRPEPUYDXWUTIVMITLRVWDBKHERHITJKBTKZDLWVKSJSUPSQJUEPKC9QTJIGKQGPRMRUHIWYPYSHCYUQXQRN9IJBDPRLYTADHVFQRBZNOPNBWXFLQIOMEMXFGMZ9SBVBTHHXFHDIIRKSGMZAPIKBXYDCEAQLSTTXDPQ9ASORJUZLMNOKQNXMJCTH9KZLBPNWVMBJSQXDEMFWWBNVQZXCJYRXEMBSSGWLVNOIEIZD9EJEWGHICEXOJZAEHJTJHTENPSZFERQBJZPX9NQOHGBYSUMKUXZDJ9FHEZUW9SMQHWMMNRJTKSAMWGKMDWCMB9ARCODYEXSRVBDFWXDHMEY9CT9QXTZNELVWSOHSJYPMQGKVFRNMUNQAPTVMVVFVNNBBBQAMOWSMETCHHMRWLXWWOEMFOEAZWMPLGSUZRS9PIUHMZOXBQKEQUBPRZICPQCSEVUMLLKTWC9VGZJEXDBAXVTMYYSACYQVJTIVIEZDI9SUHVLFKZEJAYEEYEBFCQFMIZZIATDDBNZQESSNXVEYFJRJSHHGQQDRGVDVLYMQKSRMOWMSNIISJYGIAWJKEHMWKDYEAEAETSST9JMYNC9KI9MMZGNADIJRYDKLXEFUZTMJEB9DBSPVOXVXLMGCXDXRQTZRUWLMHCXTSRZNGZDAFF9IYUZWISUBGNUEYTOPHDHFRJOVUVHUXIHLJHMJG9SSHMLRUULBJYGKHUQYAQOT9GHTXX9LCZLLEIMXYKIZHGSVHGSPA9GSKLLMIJ9WYL9DLODOWNXTMHJFZBIOIRVRBZIPAYDNRLZODNJQWATHOWMGACVPLDEANJXFETDCVFDOFGECVOWWXJQJEGAACIZBYFHDMIIMZHRMGJZSJDTVCUPDZKDFHWKVDZB9NILRXDGPHVVQBGGMDXDEVDMRXOTRJSNIEMXJVTDYHGTOLUIPSBCERYJSUQDGLQWVCBPPCLSVGVDYSCKGXUBGYRAZJDAQYCNFWZSLKOYJSRCGVJZHTSXMFBKCDNBJR9HKEEE9ALGASHEYLABOUKKUYCGEWLNZRQIBXWMIPLDXZXDJNVTOCLSQUPTEQIFLCSWUJOLWI9TWMSF9HZWBZCIYOQITAAMIBHQGDJKSXWRHPLYICVYOKYZUXFVUCZUTRBSKTKOQYURAXLLPNJNY9QVCQBG9ZNEJBXCTFHROGTXL99PWAPFKJOBIE9FEICTTX9GOUFOCABPFRDFOHRQWYLMDJYWPTUULBFBTMEXLNWCHVPEASRREAQ9TXKRJRMKPDPHPKOEKCCHOR9BDGZ9RUEXBVJVBWMKUEZNXEKQYZZCHAWPFKUTWCIDM9JHNXUJOS9HDDZSQZMIUFCHJYJHTOYKRPYP9DRGNYDRDCYKNE9BZQONWFHORWTVAKUIGX9SAPJTAEBOSUHIAPUMDNPMWLHGPPKFZGWBLLFATYUZOK9HRJBDYPHIEDGMNVRDBJCKGQOOQFBVHBGLSVHPWCROQZANFBJGW9QEE9WVTUPFMULPKGKHXSBGPJSNXVPXVGYFYAITGJAJYOWHNHGSKVCK9SKCOYHRGGSDYO9ILEPPZLXECTTI9GGFXNN9GOWUSGOLEDJ9XHOAVZIKJRPLTALVQG9DRTYNS9ZUUTZAJHJSPCKMKKQKQKSTDINPJVXYDYAHDGFWINGFKXFW9DSHTTABQNVHD9ZPCFDISQNVL9NHDYMPPNQJUVWIHXUMVJ9ZXZKIRHQQWQVRMTOYAPOWHFXMGCXJFTJFJBMFLAJHHEURVHPRQNDOXQTGBKU9XDKHVIVCCLWDSBIDLCOWMEJJMXDONHHTUANKKOYFURF9DTVAAFQEMCBVZBQZMJQIFHRISLFXGQMUMZNYNOXYDDYWFHVIQJNJVKVWXUTWBMTBXQSCWXDTZZQVWELRFLAGXNXSDPKKMKUIHN9SSOHKNZAZCOYGUKFXJIDDLECPVINKENDMKWJLGCWKZPPQQAAONUOYFVTWVBTFDBUYYHHDZUCXMVNNUVBOGD9KOIMONVTZBGFX9FRVCTNRBWJVJSJOUZBXBNTKQUVZIOEUDNOL9WYUG9FLKJVHOJWBVLMKWMJPRMQDTEQLXAFECHPZYHPQZFSEPDNQGPRMITSQCQFMAZSSAFOKNRPMUK9JOKAKHUZAZYIURHQYUGAVNHN9TXJLDFWSJSWEAEWQCGLLR9ZDBRXNNZWWPDYF9LWFKMPHLYLHIWWCEXFJOCWXWTPK9ICCLEOOKAXWDPK9P9FWXSSRZBKRNWZPJYYWYYSVCODB9JVLFH9E9YOTUSGHRFGFGSVDHX9BYBTGLYCTRKOEVUFVWMIPRPWCMLNBTPG9CB9NNLQCYCIF9PVUCZ9OZRQDEIIJOWWCKZEYHCE999WPXMUFQSISGJCHZVTLPFHSYHJXHTVBIMEUXXJWUWQHNNQPHV9CVSQQRCMSRWPKRTYZLBOKZXTCFMDHOVXITWWHEJLYPYRNQTLXBUNSSUAASYVKLRTZZWMVYCKBNVDKSLO9DXCMOITHA9DCUSOIKWNHI9QJKLVKGIC9HYYWSBYD9OJQRHY9UPJULCAYZQTHSATYKTPEWAVTRTNO9VYGLEKUYHOLMBHWNRSKYTOPDDFQNDTOSBDWIAVWRAWGXFLJCL9LBJNVZHVZVKLRKIYDVMZSDHKZIPPI9EWEAJ9NUPHHR9KAWUNS9NT9JJDWPIUCNBYDLVCTBFACTETDVGZVZSDKXQXUBKXAPULERN9CIYATKGKPJAUSJ9YNRVBCLGRZZYDVJGWA9IVQBASIWVZGHTKNTEKDXBYZXQQTSXYOSEEHB9YJDKXPLIUQSSWBHKIGMTKRXUAELSJZXRGMXJWXCWVJBCXSZWVPXWHJWXBOFGZBIWZHHUFULCKHSDKJRKZZ9FPTUCBHESQ9DNIGWEZGWTHQCOMHXGW9AGMYHBQ9WSLIRGPUYIAAOKYZVNDRKBFWGYRSJLIAEXLXQPFGZTQPHNFEUWQLNXPDYXQOZ9MUAUH9JU9SWCJAAWRZZXKWYFFOGRPPOQJQPXGNUPOXLRRYZPDDTHMKVAXPZPADZKENHZHACAZZHMCAFVC9QVQXPKSDDLLSD9NQLZRPKUKXZZYRKSTKHYK9LZIYXCQXIKMNJKYBWLPG9GSEJPKGIFYNTZTOINIZBBHMUJTYGMAJXZZOYXBNVQTNHRIEUFARKQKQJCTQDDPQWQSPUIZFGQXILXYYADVLRZEVLXSZLPEEFMSCVLYIFFAYPIWWT9VFSJTDZVOCYZABVOQEGFEFMJIWEEKFKBBNIALMMJLMNZDZPDSSPMDQYWGDCAZCRKBLABJUXVZ9EOSKJLJRVWKOYHUVHRASW9PRAUAK9DGXVLTBQEYIKNHOXKLXZTFSEQF9VTCAKVYEONZFOVJVXNAPPOYWPQXZKQJQFLNCU9MQRJETHDVDYWRCVLWYQXXOXMKZUPWHWLVKZACNNYBDZLFQSYNOAWSAWHYGOGVZACBOCSXD9JVVIUG9LRZBHQNTZEBGT9JZNPFDWMIKCIOMUSSKROUEWYHJKKGTSEUTKOJDXGGVHVSAMUXAFVWPNX9YZTK9FE9FPJUCPEERLGWKNIXZUTJFUARMZSMJEFEUKFOIDMDPOCZGGUFMARX9MMWAJNNF9BB9SOLKZMGATMZJKINKGMAEZFVTFUQVVYJKCAGSFBNVIOZVJFGOYZJDMNPPZOTVAZCFXDKRIJOGXVAF9SADRSRPSKSDQJJAWXSVIKDFQ9UJYVHJQSRNYWEPPOUSOXGCRIVIOUZHI9MYGJITK9EGDSIADVKE9STUQSJBETYHJUUHESVEVKSUHUGWENDRL9UVYNGGETSBOKKAGDNFJXRYHPWQPEADGKB9NFHPDWTFKXSTZVLEEDVJMGEINXXPKDPMHVGBMNYKDEL9UZXGTUTOVQSCYAG9WZUPBEIWQXVNAGPKPHUYKCWUFXRVVYMCOBGOCEBBIOXELLWPUHFT9CEMFXXGHMROYGDOQUQYKNIVJLQZSOBZXSUBUICNLYI9DGHIFJLLGXJEEESYOMPOMAARGSWCP9JUUBLCVXDVRLGNB9DBCDLLEWEWL9IXVVWNIILBVV9FRZVCKKMIEICOBRLFWHXGERNEBXBRRKUEIMLHDZNFIKOPOBFUSJTAYHKJCC9ZZJNPLSJSZUVLQGABB9YZMCPBLGZV9KGRGOKBNERFUMUQKWKOPDCLXFCDNYS9UYDCOADJPLMWVAQRGUODVHGAXNBUPE9JSAJBWCQPOZTKMCONEQNFDAIFQJLOUJBHBRANLLUOSVNLGGQMWA9ACLSLFTNFMDXFECYXAQHTIQYHEFQTAYBKFMKIODBBCVRBHULD9MDLRUNS9OQCWPMO9O9T9GZVETNBAC99FVKSC9OCTKLDGFP9AXHHFUYGYAEHPJOCQREFTLAQJ9LPWUAGQBSOFQKOAGBATJGQCDXZPCYETMCWMWEFFPPFTJMIPZJJECIZAMXHHKVW9BFJPHVETSGBSTCVOWOSLPXLQZML9GGFRXDILRKMRTCKY9QFKAJBHNPSDHMYMNWN9LXTDFAWYNYXMGUKA9PKF9ODRTVODLNEVYNGIXGRUCAOKDQKRWHGWDCDTPFQYPTVLXZLLGHAYRSGZCSDTKZSLHLQWMNIBXHGCMESHZC9ZYDIZZOCPNCXVJCFYXPLMUKDMSTZ9TXBZLRZFVIESPANDIPSVTKDOCAVBRX9YXSJREVTECYLPHLHQPCZQBRYLVGVNUVRZECKJSJTZDMBPAKFQJPSVGQYKZGIPAANEZBBAGPKNETDVHGQFXMGK9PL9WWFGCHAKG9AIDEDQIJBDRQYILF9VOGNSNNHFYNNXJICWUJLIDW9UXKKXFLYAEXTZMRCVK9SAFCYCXYBRBLWLXMSSCYFMEZTYLWTYLIILFIVLDMFTLPZAUAPUPROWSIAMHRBB99ANFBMSN9HFUMKSKKYLBNFFNHWUQVV9GDOUROUMGOKETZTH9TKQNVBRKHIVPHQJYVVWUKNSSNXESUFYDCGKSRAJTTYBNI9UZADJQZPGEUOUEMRLWAJWVOCGEBXFKJNNBBNVWYWJI9DMNBVBDDNDWQNUGKMVKFBHUYDGBXTJTJPJAPIIQWFIYYDXTCWUFAQCV9ESE9LWEICQFTQLNJ9WA9RHAGXLMALACCBSCXMGZTLOEMCNSOQIBEPAJIQOMKICTFQXDJLYRCJNMEGJBCWCBAE9XWCERGTJARMLMHEEYXYSQMRPSBN9LXVASSGLI9SOJDTSFLNKNITVLJUZFVMSEKGBCIKOQQFCVLAWT9QJCUGOYRBUXLSELLKNNRSLLNTLNNBHOBGQHDZDXYBKSQFUMYWEQSLOECSCHDQKS9TKBQQWSAVBT9SJX
digest is a next byproduct by hashing private key.
var Signing = require('../lib/crypto/signing/signing');
var Converter = require('../lib/crypto/converter/converter');
var seed = 'ABMUSHI9TEST';
// index is fixed in this example.
var index = 0;
// get digest
var getDigests = function(seed,index,security){
var key_trits = Signing.key(Converter.trits(seed),index,security); // private key
var digest_trits = Signing.digests(key_trits); // digest trits
var digest = Converter.trytes(digest_trits); // convert to tryte
return digest;
}
// show different digests with different security level(1,2, and 3)
for(var s=1;s<4;s++){
var digest = getDigests(seed,index,s);
console.log('- - - - - - - - - - - - - - - - - - - - -');
console.log('security: ',s);
console.log('digest length: ',digest.length);
console.log('digest: ',digest);
}
- - - - - - - - - - - - - - - - - - - - -
security: 1
digest length: 81
digest: OUHUMCXMVPJVCKKKNRJLZXMXKVFWDNPGDUKDKJCQFEXFXYDNFLJQHCEAPFCZVNFPCIJITBPDGVQOUYGHY
- - - - - - - - - - - - - - - - - - - - -
security: 2
digest length: 162
digest: OUHUMCXMVPJVCKKKNRJLZXMXKVFWDNPGDUKDKJCQFEXFXYDNFLJQHCEAPFCZVNFPCIJITBPDGVQOUYGHYCBGPOYSCSDUGDFMJFFOZQRDKCUHOGIRLFOMFNJGITVWFYZNJDSMJJTAPBMQ9PZI9ARRSHYOMYFKLIROWA
- - - - - - - - - - - - - - - - - - - - -
security: 3
digest length: 243
digest: OUHUMCXMVPJVCKKKNRJLZXMXKVFWDNPGDUKDKJCQFEXFXYDNFLJQHCEAPFCZVNFPCIJITBPDGVQOUYGHYCBGPOYSCSDUGDFMJFFOZQRDKCUHOGIRLFOMFNJGITVWFYZNJDSMJJTAPBMQ9PZI9ARRSHYOMYFKLIROWAVMRWHOBWLGLFJXTIFAVKNDTQZ9P9AHPBEFO9BVSVKIAFIXWAVIOEZBLZCCRSXNSWWSPKYCMUUGZZKYZFW
Because long seemingly random string is hard to find sense, below is a figure that pictualizes what is happening.
Apparently, the bigger security
, the longer length. And by changing security
, only what deviates are newly appended chunk.
Note that every address has 81 tryte length. However, private key and digest are of different length, and length depends on the level of security
. It implies address is generated by the mechanism with which any length of digest(pricisely must be multiples of 81) produces an address with length of 81 trytes.
For example, if security=10
,Private Key is 21870(=2187\*10)
trytes, digest is 810(=81\*10)
trytes but address is 81
trytes. And importantly, completely different addresses are randomly produced from different security
with no partial match.
Multisig makes use of nature that final address being generated is always length of 81 trytes no matter how long the original digest is.
Now we start looking at how multisig works.
For instance, as a setting, let's say Alice and Bob want to create an account, which both of them are responsible of the balance. They have own unique seed neighther of them know other's.
First of all, they generate the address called Multisig Address, which looks normal address of 81 trytes from any tangle viewers, but is generated in different way. When generating multisig address(of two people in this case), two digests of each Alice's and Bob's are used. And for each of them, they choose their own index
, and security
level individually to submit their digest.
Note that they can share their digests freely. But, never share seeds as always.
Next, concatinate those submitted two digests to create one digest of double length. This new digest looks digest of security=5
. Then using same method as used in normal address generation, hash the digest to create an address out of it.
This address is Multisig Address. In summary, Two different digests, each of which created from two different seeds, concatinated together is seen as one digest. And generate address from the digest. Of course, if you concatinate more than two digests, you can generate the address that requires more than two people to sign.
Let's assume we send 100[Gi] (big amount!) to this address. Sending to multisig address is just as same as ordinary sending. The difference is in sending(spending) from multisig address. Spending from any address requires signature. And multisig address by its name requires several co-singers.
Let's create transfer bundle. In this short example reveiver address is "xxx". And we send 50[Gi] to "xxx". And this 50[Gi] comes from the multisig address's balance(BID...). And remainder address which is used to send change amount to is not generated automatically in multisig transfer, because to generate next address one needs to have several digests from different people. So, before transfer value from multisig address input, make sure that all next digests with next index
of co-signers are ready to create next address. Also, if you no longer need your change value to be sent to multisig address, you can specify any normal address.
Signature is generated from own private key. This procedure is no different from of normal signing, which is explained in this article. Signed data is generated bundle hash(strictly speaking, normalized bundle hash). Co-signers create signature of same bundle hash.
Now we have co-signers' signature, two signatures in total. In this example, Alice is security=2
and Bob is security=3
, so Alice's signature is of 4372
trytes, and 6561
trytes for bob's. Totally, 10935 (=4372+6561)
trytes are stored in five signatureFragment
of transaction objects in the bundle. (five comes from 5 = 10935/2187, where each signatureFragment
of one transaction object is 2187 trytes.) *詳細。
Below is overview of the final bundle.
The figure above, each signature is colored just for visual friendly purpose. On acutual tangle, viewers cannot distinguish security=5
normal signature from security=2
and security=3
multisignature, and two security=2
and one security=1
multisignature.
And order matters. In this example, digest of Alice comes prior to digest of Bob, so signature should correspond to it.
Validating is a piece of cake. On Tangle, multisig bundle being attached seems just as same as the one created from single signature. Only differences are the length of the signature. As seen in single signature, where different security
level creates different length of the signature(security times 2187 Trytes
), multisig bundle of, let's say, three people of security=3,3,2
can be treated as single sig of security=3+3+2=8
bundle when being validated.