Научная статья на тему 'Вычисление Адреса блокчейн кошелька средствами iOS Swift 4'

Вычисление Адреса блокчейн кошелька средствами iOS Swift 4 Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
889
98
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
NFC / NDEF / SECP256K1 PUBLIC KEY / BITCOIN ADDRESS / SWIFT / CRYPTOCURRENCY / BLOCKCHAIN WALLET ADDRESS / SECP256K1 ОТКРЫТЫЙ КЛЮЧ / БИТКОИН АДРЕС / КРИПТОВАЛЮТА / АДРЕС БЛОКЧЕЙН КОШЕЛЬКА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Москалёва Ю.П., Сейдаметова З.С.

В настоящей статье, используя библиотеки базовой криптографии и средства языка программирования Swift 4, решается задача формирования Адреса Блокчейн Кошелька. Предлагаются расширения и утилиты для реализации алгоритма вычисления биткоин Адреса из uncompressed открытого ключа, а также решается задача подключения в Swift вшитой в операционную систему iOS криптографической библиотеки CommonCrypto.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Blockchain Wallet Address Calculation Using iOS Swift 4

Blockchain technology implemented using digital currencies such as bitcoin. Bitcoin is an online virtual cryptographic currency based on public key that is represented by communication protocol. Bitcoin was proposed in 2008 by an anonymous group of developers named as Satoshi Nakamoto. Bitcoin became functional and widely using as a cryptocurrency allowing conversion with traditional currencies. Today bitcoin is used where needed "hot payment" scenarios (in the scale of minutes). Bitcoin is a virtual cryptographic currency based on accounts. It is not correct to consider bitcoins as digital tokens. Bitcoin is represented as a balance in a bitcoin account defined by an Elliptic Curve Cryptography key pair. In the paper the Elliptic Curve is y 2 = x 3 + 7 in the prime field Fp, where p = 2256 232 29 28 27 26 24 1. The public key is the point on the elliptic curve ( X [32],Y [32]), where X [32] is the X coordinate, occupying 32 bytes; Y [32] is the Y coordinate, occupying 32 bytes; 0 × 04 is the marker of the uncompressed public key representation. Markers 0 × 02, 0 × 03 are used to indicate the sign. In this paper, using the basic cryptography libraries and the tools of the programming language Swift 4 we presented the problem of the forming the Blockchain Wallet Address. The analog of the categories of classical iOS programming language Objective C is the technique of extensions in the modern programming language Swift. Extensions add new functionality to existing types of classes, structures, enumerations and even protocols. The most used scope of extensions is the addition of calculated data type properties. The extension method adds methods to support bitcoin transformations. To ensure the algorithmic solution of the problem of obtaining the Address we used methods of classical cryptography. It is considered the problem of connecting the CommonCrypto cryptographic library wired in iOS with Swift.

Текст научной работы на тему «Вычисление Адреса блокчейн кошелька средствами iOS Swift 4»

удк: 004.056 : 510.51 msc2010: 68p25, 94a60

ВЫЧИСЛЕНИЕ АДРЕСА БЛОКЧЕЙН КОШЕЛЬКА СРЕДСТВАМИ

iOS Swift 4

© Ю. П. Москалёва, 3. С. Сейдаметова

ГБОУВО РК «Крымский ИНЖЕНЕРНО-ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ» ФАКУЛЬТЕТ ЭКОНОМИКИ, МЕНЕДЖМЕНТА И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

пер. Учебный, 8, Симферополь, 295015, Российская Федерация e-mail: yulmosk@mail.ru, z.seydametova@gmail.com

Blookohain Wallet Address Calculation Using iOS Swift 4.

Moskaleva Y. P., Seidametova Z. S.

Abstract. Blockchain technology implemented using digital currencies such as bitcoin. Bitcoin is an online virtual cryptographic currency based on public key that is represented by communication protocol. Bitcoin was proposed in 2008 by an anonymous group of developers named as Satoshi Nakamoto. Bitcoin became functional and widely using as a cryptocurrency allowing conversion with traditional currencies. Today bitcoin is used where needed "hot payment" scenarios (in the scale of minutes).

Bitcoin is a virtual cryptographic currency based on accounts. It is not correct to consider bitcoins as digital tokens. Bitcoin is represented as a balance in a bitcoin account defined by an Elliptic Curve Cryptography key pair. In the paper the Elliptic Curve is y2 = x3 + 7 in the prime field Fp, where p = 2256 - 232 - 29 - 28 - 27 - 26 - 24 - 1. The public key is the point on the elliptic curve (X[32], Y[32]), where X[32] is the X coordinate, occupying 32 bytes; Y[32] is the Y coordinate, occupying 32 bytes; 0 x 04 is the marker of the uncompressed public key representation. Markers 0 x 02, 0 x 03 are used to indicate the sign.

In this paper, using the basic cryptography libraries and the tools of the programming language Swift 4 we presented the problem of the forming the Blockchain Wallet Address.

The analog of the categories of classical iOS programming language Objective C is the technique of extensions in the modern programming language Swift. Extensions add new functionality to existing types of classes, structures, enumerations and even protocols. The most used scope of extensions is the addition of calculated data type properties.

The extension method adds methods to support bitcoin transformations.

To ensure the algorithmic solution of the problem of obtaining the Address we used methods of classical cryptography. It is considered the problem of connecting the CommonCrypto cryptographic library wired in iOS with Swift.

Keywords: NFC, NDEF, secp256k1 public key, Bitcoin Address, Swift, cryptocurrency, blockchain wallet address

Введение

Биткоин представляет собой цифровую систему, основанную на эллиптической криптографии secp256k1. Биткоин впервые был предложен в 2008 году С. Накамо-то [1] и стал полностью функциональным в январе 2009 года, получив широкое распространение, вплоть до возможности конвертации в другие инструменты. Сегодня биткоин используется там, где необходимы быстрые операции (в шкале минуты) [2].

Биткоин — это система, основанная на учетных записях, потому неправильно интерпретировать биткоины как цифровые токены, поскольку они представляются как баланс в биткоин-счетах. Биткоин-счет определяется парой криптографических переменных на эллиптической кривой [3], [4].

Обзоры исследований по ключевым проблемам биткоин-систем, таких как логистические, экономические аспекты, а также вопросы безопасности при проведении транзакций, представлены в работах [5], [6], [7], [8], [9].

Вопросы приватности, учета, адаптации общепринятых нотаций в контексте использования биткоинов, а также реализация биткоин-систем и моделирования транзакций посвящены работы [10], [11], [12], [13], [14], [15].

Практическая реализация биткоин-счетов и биткоин-кошельков отображена во множестве патентов. Например, в патентной заявке [16] компании Coinbase, Inc. предлагаются система и метод безопасной транзакции на некоторый биткоин-адрес. В патентной заявке [17] рассматривается пользовательская система транзакции крип-товалюты с помощью токенов. В патенте [18] предложена система сервиса «горячего» кошелька, включающая сервер управления и серверы аутентификации, которые конфигурируются независимо друг от друга.

Для осуществления биткоин-транзакция активно используется технология NFC (Near Fieled Communication) [19], которая на сегодняшний день является востребованной и активно развивающейся. Технология NFC поддерживается большинством современных мобильных устройств. Основа технологии NFC - это радиочастотная идентификация RFID (Radio Frequency IDentification) [19], посредством которой RFID-метки автоматически передают, записывают и считывают сигналы. Зона приема зашифрованного сигнала до 10 сантиметров, поэтому NFC технология считается более защищенным способом передачи информации по сравнению с другими технологиями. Появление NFC-технологий расширило диапазон применения мобильных телефонов, в частности, телефоны начали использовать [19]:

• для эмуляции банковских карт, которыми можно расплатиться в общественном транспорте или супермаркете,

• для обмена визитками при соприкосновении телефонов,

• для получения контекстной рекламы при прикосновении к смарт-плакату,

• для передачии фотографий, непосредственно с телефона на принтер,

• вместо билетов на различные виды мероприятий,

• для настройки WiFi-сетей прикосновением смартфона,

• для обслуживания смарт-карт блокчейн-кошельков.

Развитие технологий беспроводной оплаты открыло доступ на рынок карт, оснащенных независимой антенной, таких как: Visa Pay Wave, Master Card PayPass, Google Wallet, и др.

Хотя чипы NFC встроены в iPhones, начиная с модели iPhone 6, функционал поддержки чтения NFC-меток добавлен в Core NFC только в операционную систему iOS 11, начиная с модели iPhone 7.

Смарт-карты поддерживают чтение данных в формате NDEF, в соответствии со следующими стандартами NFC Forum [20], [21], [22]:

• NFC Forum Type 4 Tag Operation Specification [NFCForum-TS-Type-4-Tag_ 2.0],

• NFC Data Exchange Format (NDEF) Technical Specification [NFCForum-TS-NDEF_ 1.0].

Открывшиеся технические возможности и добавленный в Core NFC функционал чтения NFC ставит перед продвинутыми пользователями iOS задачи обслуживания блокчейн математики. Настоящая работа посвящена решению задачи формирования Адреса блокчейн-кошелька по открытому ключу для запроса баланса Bitcoin Main или Ethereum MainNet в зависимости от типа криптовалюты. Правильным и традиционным iOS-решением является установка и использование надежных и проверенных библиотек. Однако стремительный прогресс технологии блокчейн и переход iOS-разработки с традиционного языка разработки Objective C на Swift (последние стабильные версии Swift 4.x) ставят задачи, нуждающиеся в алгоритмической поддержке.

1. Постановка задачи

Пусть формат исходных данных задан в следующем виде:

[0 х 04, X[32], Y[32]].

Это открытый ключ криптографии на эллиптической кривой secp256k1 в несжатом (uncompressed) формате. Кривая secp256k1 представляет собой кривую

y2 = x3 + 7,

над полем простых чисел Fp (p > 3), где p = 2256 - 232 - 29 - 28 - 27 - 26 - 24 - 1.

Таким образом, открытый ключ - это точка эллиптической кривой (X [32], Y [32]), где X [32] - координата X, занимающая 32 байта, Y [32] - координата Y, занимающая 32 байта, 0 х 04 - это маркер несжатого (uncompressed) представления открытого ключа.

Эллиптические кривые симметричны относительно оси OX, что позволяет определить естественный сжатый (compressed) формат, при котором достаточно задать координату X и знак (координата Y вычисляется из уравнения кривой с точностью до знака). Для указания знака используются маркеры 0 х 02, 0 х 03.

Необходимо используя библиотеки базовой криптографии CommonCrypto и средства языка программирования Swift 4 предложить расширения и утилиты для реализации алгоритма вычисления биткоин Адреса из несжатого (uncompressed) открытого ключа.

Для понимания алгоритма приведем пример несжатого (uncompressed) открытого ключа.

Пример 1. Дан несжатый (uncompressed) открытый ключ

04C20B28FE822F16D83233C57F90CFEED64B41082A83F16347026177B33F6D9F0C052 48F85AA99145336022D583DABD8F46F85271E093939B3AE6765F854977802 Определить биткоин Адрес.

В Примере 1 открытый ключ записан шестнадцатеричной строкой, где 2 цифры определяют 1 байт. 0 х 04 - это 1 байт и по 64 шестнадцатеричных цифры на каждую координату, дают в результате 65 байтов.

Сформулируем алгоритм формирования Адреса c промежуточными контрольными результатами для открытого ключа из Примера 1:

1. Взять открытый ключ в формате шестнадцатеричной строки длины 130 шестнадцатеричных цифр (65 байт)

Входные данные:

04C20B28FE822F16D83233C57F90CFEED64B41082A83F16347026177 B33F6D9F0C05248F85AA99145336022D583DABD8F46F85271E093939 B3AE6765F854977802

2. Применить к открытому ключу хеш функцию SHA-256 Результат:

05E565044A1BAFB00A7CD460083DC4BE10EBC9D26D77A43C4D47F5E 48F2C12F1

3. К результату шага 2 применить хеширование RIPEMD-160 Результат:

1F84B0737B783BEE4E93627C9E0D1931F753D648

4. Добавить версионный байт Main Network 0x00 к началу строки предыдущего шага

Результат:

001F84B0737B783BEE4E93627C9E0D1931F753D648

5. К расширенному результату RIPEMD-160 применить SHA-256 Результат:

239164C4AD4AB7DA4EDD32A7CAECE3F3DD22DFCC3017FABA2959B302 A63DB317

6. Применить SHA-256 еще раз к результату шага 5 Результат: A3E1FAF166543E65FED2FC3D3FAD5C5155DE99A85151C16150E0A10E D79FFE38

7. Взять первых 4 байта после второго применения SHA-256 (эти 4 байта называются проверочной суммой адреса)

Результат: A3E1FAF1

8. Проверочную сумму адреса добавить к расширенному результату RIPEMD-160 шага 4.

Результат шага 8 называют 25-байтным бинарным Адресом 001F84B0737B783BEE4E93627C9E0D1931F753D648A3E1FAF1

9. Перевести бинарный адрес в кодировку Base58.

Результатом это шага является наиболее распространенный формат биткоин Адреса

13seuMnL53QwZBfYpvk61CgqmnfnWc4ahv

2. Базовая криптография Адреса

В алгоритме вычисления Адреса используются хеш функции SHA-256, RIPEMD-160 и кодировка Base58.

Первая версия алгоритма хеширования SHA появилась в 1993 году, модификация SHA-256 в 2003. Префикс 256 это размер результата хеширования в битах. Наиболее естественным для iOS способом выглядит использование CommonCrypto библиотеки. CommonCrypto - это Apple's Open Sourse библиотека криптографических методов, которая вшита в iOS. Для разработки на Objective C методы библиотеки становятся доступными после добавления заголовка библиотеки. В случае Swift подключение CommonCrypto перестает быть тривиальным. Рассмотрим следующую последовательность шагов в интегрированной среде разработки Xcode:

1. Создаем в проекте новый .h файл с именем [ИмяПриложения]-Bridging-Header.h

2. В Build Settings находим Objective-C Bridging Header и добавляем имя созданного файла [ИмяПриложения]-Bridging-Header.h

3. В созданный файл добавляем заголовочный файл библиотеки CommonCrypto

Листинг. [ИмяПриложения]-Bridging-Header.h

#ifndef [ИмяПриложения]_Bridging_Header_h #define [ИмяПриложения]_Bridging_Header_h

#import <CommonCrypto/CommonHMAC.h> #endif

После чего SHA-256 легко обеспечивается следующей утилитой

func sha256($\_$data: Data) -> Data? {

guard let res=NSMutableData(length:Int(CC_SHA256_DIGEST_LENGTH)) else {return nil}

CC_SHA256((data as NSData).bytes, CC_LONG(data.count), res.mutableBytes.assumingMemoryBound(to: UInt8.self)) return res as Data

}

RIPEMD-160 - это криптографическая хеш-функция, распространенная в 1990-х годах. Самым простым вариантом использования этой функции является подключение библиотеки.

Последней базовой криптографией алгоритма вычисления Адреса является кодировка Base58. Base58 отличается от Base64 тем, что из обращения убраны символы 0, O, l, I, так как их легко перепутать.

3. Вспомогательные методы работы с бинарными данными

Для сопровождения алгоритма Адреса расширим тип данных Data.

extension Data {

func hexEncodedString() -> String {

return map { String(format: "%02hhx", $0) }.joined()

}

}

Расширение обеспечивает перевод бинарных данных в шестнадцатеричную строку.

А метод для обратной трансформации - из шестнадцатеричной строки в бинарные данные может быть реализован следующим образом.

public func dataWithHexString(hex: String) -> Data { var hex = hex var data = Data() while(hex.count > 0) {

let c: String = hex.substring(to: hex.index(hex.startIndex, offsetBy: 2))

hex = hex.substring(from: hex.index(hex.startIndex, offsetBy: 2)) var ch: UInt32 = 0

Scanner(string: c).scanHexInt32(&ch) var char = UInt8(ch) data.append(&char, count: 1)

}

return data

}

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

4. Пошаговая реализация алгоритма вычисления Адреса

Шаг 1. Возьмем открытый ключ в формате шестнадцатеричной строки длины 130 шестнадцатеричных цифр (65 байт)

let hexPublicKey = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8

A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C5

82BA6"

Шаг 2. Применим к открытому ключу утилиту sha256

guard let binaryHash = sha256(binaryPublicKey) else { return

}

let binaryHashToHex = binaryHash.hexEncodedString()

//Шаг 2 05E565044A1BAFB00A7CD460083DC4BE10EBC9D26D77A43C4D47F5E48F2C12F1 print('^ar 2 \(binaryHashToHex.uppercased())")

Шаг 3. Применим хеширование RIPEMD-160 let binaryRipemd160 = RIPEMD160.hash(message: binaryHash)

let binaryRipemd160ToHex = binaryRipemd160.hexEncodedString()

//Шаг 3 1F84B0737B783BEE4E93627C9E0D1931F753D648 print('^ar 3 \(binaryRipemd160ToHex.uppercased())")

Шаг 4. Добавим версионный байт Main Network 0 х 00 к началу строки предыдущего шага

let hexExtendedRipend160 = "00" + binaryRipemd160.hexEncodedString()

//Шаг 4 001F84B0737B783BEE4E93627C9E0D1931F753D648 print("Шаг 4 \( hexExtendedRipend160.uppercased())")

Шаг 5. К расширенному результату RIPEMD-160 снова применим утилиту SHA256

let binaryExtendedRipemd = dataWithHexString(hex: hexExtendedRipend160) guard let binaryOneSha = sha256(binaryExtendedRipemd) else { return

}

let binaryOneShaToHex = binaryOneSha.hexEncodedString()

//Шаг 5 239164C4AD4AB7DA4EDD32A7CAECE3F3DD22DFCC3017FABA2959B302A63DB317

print("Шаг 5 \(binaryOneShaToHex.uppercased())")

Шаг 6. Еще одно применение утилиты SHA256

guard let binaryTwoSha = sha256(binaryOneSha) else { return

}

let binaryTwoShaToHex = binaryTwoSha.hexEncodedString() //Шаг 6 A3E1FAF166543E65FED2FC3D3FAD5C5155DE99A85151C16150 E0A10ED79FFE38

print("Шаг 6 \(binaryTwoShaToHex.uppercased())")

Шаг 7. Выделение проверочной суммы let checkHex = binaryTwoShaToHex.substring(to:

binaryTwoShaToHex.index(binaryTwoShaToHex.startIndex, offsetBy: 8)) //Шаг 7 A3E1FAF1 print('^ar 7 \(checkHex)")

Шаг 8. Конструирование 25-байтного бинарного Адреса let addCheckToRipemd = hexRipend160 + checkHex

//Шаг 8 001F84B0737B783BEE4E93627C9E0D1931F753D648A3E1FAF1 print('^ar 8 \(addCheckToRipemd)")

Шаг 9. Запись бинарного Адреса в кодировке Base58

let binaryForBase58 = dataWithHexString(hex: addCheckToRipemd) let address = String(base58Encoding: binaryForBase58)

//Шаг 9 13seuMnL53QwZBfYpvk61CgqmnfnWc4ahv print("Address \(address)")

Представленные фрагменты кода пошаговой инструкции позволяют преобразовать открытый несжатый (uncompressed) ключ (в качестве примера задавался ключ в формате шестнадцатеричной строки длины 130 шестнадцатеричных цифр - 65 байт) в Адрес Блокчейн Кошелька.

Заключение

В настоящей статье, используя библиотеки базовой криптографии и средства языка программирования Swift 4, решается задача формирования Адреса Блокчейн Кошелька.

Аналогом категорий классичеcкого iOS языка программирования Objective C в современном языке Swift является техника расширений. Расширения добавляют новые функциональности к существующим типам классов, структур, перечислений и даже протоколов. Наиболее используемой областью применения расширений является добавление вычисляемых свойств типов данных.

Методом расширения добавлены методы поддержки биткоин преобразований.

Для обеспечения алгоритмического решения задачи получения Адреса методами классической криптографии в работе рассмотрена задача подключения в Swift вшитой в iOS криптографической библиотеки CommonCrypto.

СПИСОК ЛИТЕРАТУРЫ

1. NAKAMOTO, S. (2008) Bitcoin: a peer-to-peer electronic cash system. [Online] Available from:

https://bitcoin.org/bitcoin.pdf. [Accessed: 30th March 2018].

2. DZIEMBOWSKI, S. (2015) Introduction to cryptocurrencies. Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, NY. p. 1700-1701.

3. BOS, J.W., HALDERMAN, J.A., HENINGER, N., MOORE, J., NAEHRIG, M., & WUSTROW, E. (2014) Elliptic curve cryptography in practice. International Conference on Financial Cryptography and Data Security. vol 8437. p. 157-175.

4. BOS, J.M., COSTELLO, C., LONGA, P., & NAEHRIG, M. (2016) Selecting elliptic curves for cryptography: An efficiency and security analysis. Journal of Cryptographic Engineering. 6 (4). p. 259-286.

5. HERRERA-JOANCOMARTI, J. (2015) Research and Challenges on Bitcoin Anonymity. Data Privacy Management, Autonomous Spontaneous Security, and Security Assurance. vol 8872. p. 3-16.

6. BOHME, R., CHRISTIN, N., EDELMAN, B., & MOORE, T. (2015) Bitcoin: Economics, Technology, and Governance. Journal of Economic Perspectives. 29 (2). p. 213-238.

7. YLI-HUUMO, J., KO, D., CHOI, S., & SMOLANDER, K. (2016) Where is current research on blockchain technology? - A systematic review. PloS one. 11 (10). p. 1-27.

8. ESKANDARI, S., CLARK, J., BARRERA, D., & STOBERT, E. (2018) A first look at the usability of bitcoin key management. arXiv preprint. arXiv:1802.04351. p. 1-10.

9. OBER, M., KATZENBEISSER, S., & HAMACHER, K. (2013) Structure and anonymity of the bitcoin transaction graph. Future Internet. 5 (2). p. 233-250.

10. TSCHORSCH, F., & SCHEUERMANN, B. (2016) Bitcoin and Beyond: A Technical Survey on Decentralized Digital Currencies. IEEE Communications Surveys and Tutorials. 18 (3). p. 2084-2123.

11. MIERS, I., GARMAN, C., GREEN, M., & RUBIN, A.D. (2013) Zerocoin: Anonymous Distributed E-Cash from Bitcoin. IEEE Symposium on Security and Privacy, Berkeley, CA. p. 397-411.

12. KOSHY, P., KOSHY, D., & McDANIEL, P. (2014) An Analysis of Anonymity in Bitcoin Using P2P Network Traffic. Financial Cryptography and Data Security. vol. 8437. p. 469-485.

13. KARAME, G.O., ANDROULAKI, E., ROESCHLIN, M., GERVAIS, A., & CAPKUN, S. (2015) Misbehavior in bitcoin: A study of double-spending and accountability. ACM Transactions on Information and System Security (TISSEC). 18 (1). p. 2:1-2:32.

14. BIRYUKOV, A., KHOVRATOVICH, D., & PUSTOGAROV, I. (2014) Deanonymisation of clients in Bitcoin P2P network. Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security. ACM, NY. p. 15-29.

15. VENKATAKRISHNAN, S., FANTI, G., & VISWANATH, P. (2017) Dandelion: Redesigning the bitcoin network for anonymity. Proceedings of the ACM on Measurement and Analysis of Computing Systems. 1 (1). p. 21:1-21:34.

16. LANGSCHAEDEL, J., ARMSTRONG, B. D., & EHRSAM, F. E., Coinbase, Inc., 2015. Hot wallet for holding bitcoin. U.S. Patent Application 14/660,418.

17. FEENEY, P. J., Filing Cabinet LLC, 2016. System and method for user authentication using crypto-currency transactions as access tokens. U.S. Patent Application 14/958,427.

18. YANG, D., KOU, L., & LIU, A., Modernity Financial Holdings, Ltd., 2017. Data analytic and security mechanism for implementing a hot wallet service. U.S. Patent 9,672,499.

19. JARA, A.J., ALCOLEA, A.F., ZAMORA, M.A., & SKARMETA, A.F. (2010) Analysis of different techniques to define metadata structure in NFC/RFID cards to reduce access latency, optimize capacity, and guarantee integrity. IFAC Proceedings Volumes. 43 (4). p. 192-197.

20. Type 2 Tag Operation Specification Technical Specification. (2011) apps4android.org. [Online] Available from:

https://goo.gl/4RCiJ6. [Accessed: 30th March 2018].

21. Bitcoin in a nutshell - Cryptography. (2017) habrahabr.ru. [Online] Available from: https://goo.gl/nGuqWa. [Accessed: 30th March 2018].

22. Technical background of version 1 Bitcoin addresses. (2017) en.bitcoin.it. [Online] Available from:

https://goo.gl/bx2Knh. [Accessed: 30th March 2018].

i Надоели баннеры? Вы всегда можете отключить рекламу.