Kraken

Подтверждение резервов

Kraken Proof of Reserves

Наша приверженность прозрачности

В Kraken мы не просто позволяем вам торговать передовыми цифровыми активами, мы работаем над тем, чтобы максимально использовать прозрачность блокчейнов с открытым исходным кодом, на которых они работают.

Наши регулярные аудиты для подтверждения резервов позволяют клиентам легко убедиться, что их балансы обеспечены реальными активами, всего несколькими простыми кликами в аккаунте.

Усовершенствованная процедура криптографического учета, проводимая раз в полгода доверенными аудиторами, подтверждение резервов, позволяет вам убедиться, что Kraken соответствует строгим стандартам отчетности и превышает уровень прозрачности, предлагаемый устаревшими финансовыми фирмами.

Что такое подтверждение резервов?

Подтверждение резервов (PoR) – это независимый аудит, проводимый третьей стороной, цель которого – убедиться, что депозитарий удерживает активы, на которые он претендует от имени своих клиентов. Этот аудитор делает анонимный снимок всех имеющихся балансов и собирает их в дерево Меркла — в безопасную для конфиденциальности структуру данных, которая инкапсулирует все балансы клиентов.

Оттуда аудитор получает корень Меркла: криптографический отпечаток, который однозначно идентифицирует комбинацию этих балансов на момент создания моментального снимка.

Merkle Root Hash

Затем аудитор собирает цифровые подписи, созданные Kraken, которые подтверждают право собственности на адреса в сети с публично проверяемыми балансами. Наконец, аудитор сравнивает и проверяет, что эти балансы превышают или совпадают с балансами клиентов, представленными в дереве Меркла, и следовательно, что клиентские активы хранятся на основе полного резерва.

Любой клиент может самостоятельно убедиться, что его баланс был включен в аудит подтверждения резервов, сравнив выбранные фрагменты данных с корнем Меркла. Любые изменения внесенные в остальные данные, даже самые незначительные, повлияют на корень – сделать фальсификацию очевидной.

Подтверждаем, что ваш аккаунт прошел аудит

Следуйте приведенным ниже шагам, чтобы криптографически подтвердить включение баланса вашего аккаунта Kraken в самое последнее подтверждение наличия резервов.

Обратите внимание: эта проверка будет отражать только остатки вашего аккаунта в поддерживаемых активах на момент проверки. Он не будет отражать какие-либо последующие сделки или транзакции, а также не будет отражать остатки в активах, которые не охвачены аудитом.

1. Войдите в аккаунт Kraken и перейдите к настройкам аккаунта (Настройки > Аккаунт).

Kraken Audits

2. Выберите вкладку Аудиты. В вашем аккаунте будут отображаться последние аудиты, в ходе которых был проверен баланс вашего аккаунта, соответствующий идентификатор аудита, дата аудита, название фирмы проводившей аудит, и тип проведенного аудита. Идентификатор аудита — это идентифицирующая строка, связанная с конкретным аудитом. Поскольку Kraken планирует проводить регулярные аудиты для подтверждения резервов, важно, чтобы каждый из них имел уникальную идентификацию.

Kraken audit list

3. Выберите дату аудита, которую вы хотите проверить. Здесь вы найдете подтверждение типа аудита, идентификатор вашей записи (специфический для вашего аккаунта и этого конкретного аудита), активы, которые были охвачены, и балансы ваших активов на момент аудита.

Идентификатор записи позволяет вам независимо подтвердить, что баланс вашего счета был включен через стороннего аудитора.

Kraken audit details

Подтверждаем вашу запись с аудитором


Простой:

Самый быстрый способ проверить запись вашего аккаунта — использовать портал стороннего аудитора с вашим идентификатором записи:

1. Скопируйте идентификатор записи, соответствующий вашему аккаунту и указанному аудиту (см. предыдущий раздел, чтобы найти его).

2. Посетите веб-сайт стороннего аудитора, ответственного за аудит подтверждения резервов.

3. Введите свой идентификатор записи на портале стороннего аудитора. Веб-сайт аудитора будет использовать этот идентификатор для поиска записи о криптовалюте, хранящейся в вашем аккаунте в сети во время аудита.

4. Проверьте свой баланс.

Сложный:

Подкованные в техническом плане клиенты могут самостоятельно реконструировать хеш своего конкретного конечного узла дерева Меркла и проверить свои балансы в стороннем аудиторском инструменте, используя этот хеш, а не только идентификатор записи.

Это позволяет клиентам убедиться, что их идентификатор записи (а также связанные остатки их аккаунта на момент аудита) были включены в структуру дерева Меркла, в результате чего аудитор опубликовал корневой хеш:

1. Сведения об аудите на kraken.com также включают «Код аккаунта», еще один код, уникальный для вашей учетной записи и данного конкретного аудита, что позволяет избежать повторного использования любого идентифицирующего кода при аудитах.

2. Вы также увидите хеш Меркла, который можно использовать напрямую или реконструировать (как указано ниже) с использованием данных вашей учетной записи и конкретного аудита. Лист Меркла, который вы будете использовать для поиска в инструменте аудита – это первые 16 символов SHA256 этого хеша Меркла.

3. Необходимые шаги в псевдокоде для восстановления идентификатора записи и листа Меркла из кода вашей учетной записи, Kraken IIBAN, идентификатор аудита и балансы описаны ниже. Обратите внимание, что результаты чувствительны к определенному форматированию строки балансов, отображаемому на странице аудита.

  • Record ID = SHA256(concatenate(Account Code, Kraken IIBAN, Audit ID))
  • Balances = concatenate(“BTC:”, balBTC)
  • Balances = concatenate(Balances, “,BTC.M:”, balBTCM)
  • Balances = concatenate(Balances, “,ETH:”, balETH)
  • Balances = concatenate(Balances, “,ETH2.S:”, balETH2S)
  • Merkle Hash = concatenate(Record ID, “,”, Balances)
  • Merkle Leaf = substring(SHA256(Merkle Hash), 0, 16)

Конкретные примеры также демонстрируются во фрагментах кода ниже. Полученный лист Меркла также виден в деталях аудита, чтобы подтвердить, что вы правильно реконструировали его.

python

Python

import hashlib

account_code = "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
iiban = "AB12C34DEFG5KSQI"
audit_id = "PR30JUN22"
record_id = hashlib.sha256((account_code + iiban + audit_id).encode('utf-8')).hexdigest()

balances = "ADA:15129.4,ADA.S:0.0,BTC:0.2600852178,BTC.M:1.25,DOT:50.0,DOT.S:20.5,DOT.P:0.0,ETH:5.27518778,ETH2.S:10.123,USDC:50000.0,USDT:0.0,XRP:0.000002"

print("Record ID: {}".format(record_id))
print("Merkle Hash: {}".format((record_id + "," + balances)))
hash_result = hashlib.sha256((record_id + "," + balances).encode('utf-8')).hexdigest()
print("SHA Result: {}".format(hash_result))
print("Merkle Leaf: {}".format(hash_result[0:16]))
rust

Rust

use sha2::{Digest, Sha256};

const ACCOUNT_CODE: &str = "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1";
const IIBAN: &str = "AB12C34DEFG5KSQI";
const AUDIT_ID: &str = "PR30JUN22";
const BALANCES: &str = "ADA:15129.4,ADA.S:0.0,BTC:0.2600852178,BTC.M:1.25,DOT:50.0,DOT.S:20.5,DOT.P:0.0,ETH:5.27518778,ETH2.S:10.123,USDC:50000.0,USDT:0.0,XRP:0.000002";

fn main() {
    let mut record_hasher: Sha256 = Default::default();

    record_hasher.update(ACCOUNT_CODE);
    record_hasher.update(IIBAN);
    record_hasher.update(AUDIT_ID);

    let record_id = format!("{:x}", record_hasher.finalize());
    let merkle_hash = format!("{},{}", record_id, BALANCES);

    let mut merkle_hasher: Sha256 = Default::default();
    merkle_hasher.update(&merkle_hash);
    let merkle_result = format!("{:x}", merkle_hasher.finalize());

    println!("Record ID: {}", record_id);
    println!("Merkle Hash: {}", merkle_hash);
    println!("SHA Result: {}", merkle_result);
    println!("Merkle Leaf: {}", &merkle_result[..16]);
}
go

Go

package main

import (
	"crypto/sha256"
	"fmt"
)

func main() {

	accountCode := "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
	iiban := "AB12C34DEFG5KSQI"
	auditId := "PR30JUN22"

	secret := accountCode + iiban + auditId

	data := []byte(secret)
	hash := sha256.Sum256(data)
	recordId := string(hash[:])
	fmt.Printf("Record ID: %x\n", recordId)

	balances := "ADA:15129.4,ADA.S:0.0,BTC:0.2600852178,BTC.M:1.25,DOT:50.0,DOT.S:20.5,DOT.P:0.0,ETH:5.27518778,ETH2.S:10.123,USDC:50000.0,USDT:0.0,XRP:0.000002"

	merkleHash := fmt.Sprintf("%x%s%s", recordId, ",", balances)
	fmt.Printf("Merkle Hash: %s\n", merkleHash)

	hashResult := sha256.Sum256([]byte(merkleHash))
	hashResultStr := string(hashResult[:])
	fmt.Printf("SHA Result: %x\n", hashResultStr)
	fmt.Printf("Merkle Leaf: %x\n", hashResultStr[0:8])

}
bash

Bash

#!/bin/bash

ACCOUNT_CODE="8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
IIBAN="AB12C34DEFG5KSQI"
AUDIT_ID="PR30JUN22"
RECORD_ID=$(echo -n "${ACCOUNT_CODE}${IIBAN}${AUDIT_ID}" | sha256sum | head -c 64)
BALANCES="ADA:15129.4,ADA.S:0.0,BTC:0.2600852178,BTC.M:1.25,DOT:50.0,DOT.S:20.5,DOT.P:0.0,ETH:5.27518778,ETH2.S:10.123,USDC:50000.0,USDT:0.0,XRP:0.000002"
MERKLE_HASH="${RECORD_ID},${BALANCES}"
HASH_RESULT=$(echo -n ${MERKLE_HASH} | sha256sum | head -c 64)

echo "Record ID: ${RECORD_ID}"
echo "Merkle Hash: ${MERKLE_HASH}"
echo "SHA Result: ${HASH_RESULT}"
echo "Merkle Leaf: $(echo -n ${HASH_RESULT} | head -c 16)"

Недостатки и будущие улучшения

В интересах обеспечения прозрачности мы хотели бы поделиться некоторыми недостатками в процессе подтверждения резервов, которые мы выявили.

  • Подтверждение резервов предполагает подтверждение контроля над средствами в сети на момент проведения аудита, но не может доказать исключительное владение закрытыми ключами, которые теоретически могли быть продублированы злоумышленником.
  • Процедура не может выявить каких-либо скрытых обременений или доказать, что средства не привлекались для целей прохождения аудита. Точно так же после последней проверки могли быть утеряны ключи или украдены средства.
  • Аудитор должен быть компетентным и независимым, чтобы свести к минимуму риск двуличия со стороны аудита или сговора между сторонами.

Мы стремимся смягчить некоторые из этих недостатков, привлекая уважаемые независимые сторонние фирмы для подтверждения резервов, проводя эти проверки регулярно и часто.

*Обратите внимание: не существует официально принятых правил или процедур, определяющих проверку аудита запасов. Мы наняли независимую бухгалтерскую фирму для проведения заверения в соответствии со стандартами, установленными Американским институтом дипломированных бухгалтеров, и для выпуска независимого бухгалтерского отчета о согласованных процедурах. Эти отчеты включают конкретные процедуры, выполненные этой фирмой, а также их выводы.

Подтверждение резервов