Kraken

Proof of Reserves

Kraken Proof of Reserves

Ang aming Pangako sa Transparency

Sa Kraken, hindi ka lang namin hinahayaan na mag trade ng mga makabagong digital asset, kami ay nagsusumikap rin upang lubos na maisulong ang transparency sa mga open-source na blockchain kung saan sila pinapatakbo.

Pinapadali ng aming regular na pag-au-audit ng Proof of Reserves para sa mga kliyente na i-verify na ang mga balanseng mayroon sila ay sinusuportahan ng mga totoong asset, lahat ng ito ay kayang gawin sa ilang click lang sa kanilang account.

Isang advanced na pamamaraan ng cryptographic accounting na isinasagawa kada kalahating taon ng mga pinagkakatiwalaang auditor, ang Proof of Reserves ay nagbibigay-daan upang patunayan na natutugunan ng Kraken ang mahigpit na pamantayan para sa pananagutan at hinihigitan pa ang transparency na ibinibigay ng mga legacy financial firm.

Ano ang Proof of Reserves?

Ang Proof of Reserves (PoR) ay isang independiyenteng pag-audit na isinagawa ng isang third party na naglalayong matiyak na hawak ng isang custodian ang mga asset na mayroon ito sa ngalan ng mga kliyente nito. Kinukuha ng auditor na ito ang isang hindi kilalang snapshot ng lahat ng balanseng hawak at pinagsama-sama ang mga ito sa isang Merkle tree — isang istruktura ng privacy-friendly data na sumasaklaw sa lahat ng mga balanse ng kliyente.

Mula doon, nakakuha ang auditor ng isang Merkle root: isang cryptographic fingerprint na natatanging kinikilala ang kumbinasyon ng mga balanseng ito sa oras na ginawa ang snapshot.

Merkle Root Hash

Pagkatapos ay kinokolekta ng auditor ang mga digital na lagda na ginawa ng Kraken, na nagpapatunay ng pagmamay-ari sa mga on-chain addresses na may mga balanseng publicly verifiable. Panghuli, ang auditor ay naghahambing at nagve-verify na ang mga balanseng ito ay lumalampas o tumutugma sa mga balanse ng kliyente na kinakatawan sa Merkle tree, at siguraduhing ang mga asset ng kliyente ay hawak sa isang full-reserve na batayan.

Maaaring independiyenteng i-verify ng sinumang kliyente na ang kanilang balanse ay kasama sa audit ng Proof of Reserves sa pamamagitan ng paghahambing ng mga piling data sa Merkle root. Anumang mga pagbabagong ginawa sa natitirang bahagi ng data, gaano man kaliit, ay makakaapekto sa pinagmulan nito – na magiging dahilan para makita ang pandaraya.

Pagpapatunay na ang iyong account ay na-audit

Sundin ang mga hakbang sa ibaba upang ma-verify cryptographically kung kasama ang balanse ng iyong Kraken account sa kamakailang Proof of Reserves.

Tandaan: Ipapakita lamang ng beripikasyon na ito ang mga balanse ng iyong account sa mga sinusuportahang asset sa oras ng audit. Hindi nito ipapakita ang mga kasunod na mga trade o mga transaksyon, at hindi rin ito magpapakita ng iyong mga balanse sa mga asset na hindi sakop ng audit.

1. Mag-log in sa iyong Kraken account at mag-navigate sa mga setting ng iyong account (Mga Setting ng > Account).

Kraken Audits

2. Piliin ang tab na Mga Audit. Ipapakita ng iyong account ang mga kamakailang mga audit kung saan na-verify ang balanse ng iyong account, ang nauugnay na Audit ID, ang petsa ng audit, ang pangalan ng kumpanyang nagsasagawa ng audit, at ang uri ng audit na isinagawa. Ang Audit ID ay ang pagkakakilanlang string na nauugnay sa isang partikular na audit; dahil inaasahan ng Kraken na magsasagawa ng regular na mga audit ng Proof of Reserves, mahalaga na ang bawat isa ay may natatanging pagkakakilanlan.

Kraken audit list

3. Piliin ang petsa ng audit na gusto mong i-verify. Dito, makikita mo ang kumpirmasyon ng uri ng audit, ang iyong Record ID (partikular sa iyong account at ang partikular na audit na ito), ang mga asset na nasasakupan, at ang mga balanse ng iyong asset sa oras ng audit.

Ang Record ID ay nagbibigay-daan sa iyong malayang pagkumpirma na ang balanse ng iyong account ay kasama, sa pamamagitan ng third-party na auditor.

Kraken audit details

Pag-beripika ng iyong record sa auditor


Simple:

Ang pinakamabilis na paraan upang i-verify ang iyong account record ay sa pamamagitan ng paggamit ng third-party auditor’s portal kasama ang iyong Record ID:

1. Kopyahin ang Record ID na nauugnay sa iyong account at sa tinukoy na audit (sumangguni sa nakaraang seksyon upang mahanap ito).

2. Bisitahin ang website ng third-party auditor na responsable para sa pag-audit ng Proof of Reserves.

3. Ilagay ang iyong Record ID sa portal ng third-party auditor. Gagamitin ng website ng auditor ang ID na ito upang mahanap ang talaan ng cryptocurrency na hawak sa iyong account on-chain sa oras ng pag-audit.

4. I-verify ang iyong mga balanse.

Advanced:

Maaaring naisin ng mga tech-savvy na kliyente na independiyenteng buuin ang kanilang partikular na Merkle Tree leaf node hash at hanapin ang kanilang mga balanse sa third-party auditor tool gamit ang hash na ito, sa halip na Record ID lamang.

Nagbibigay-daan ito sa mga kliyente na i-verify ang kanilang Record ID (pati na rin ang mga nauugnay na balanse ng kanilang account sa oras ng audit) ay kasama sa istruktura ng Merkle Tree, na nagresulta sa Root Hash na inilathala ng auditor:

1. Ang mga detalye ng audit sa kraken.com ay nagsasama rin ng isang "Account Code", isa pang code na natatangi lamang sa iyong account at ang partikular na audit na ito, na iniiwasang magamit muli ang anumang identifying code sa iba pang mga audit.

2. Makakakita ka rin ng Merkle Hash na maaari mong gamitin nang direkta o buuin muli (nasasaad sa ibaba) gamit ang mga detalye ng iyong account at ang partikular na audit. Ang Merkle Leaf na gagamitin mo para sa paghahanap sa auditor tool ay ang unang 16 na character ng SHA256 ng Merkle Hash na ito.

3. Ang mga kinakailangang hakbang, sa pseudocode, upang buuin muli ang Record ID at Merkle Leaf mula sa iyong Account Code, Kraken IIBAN, Audit ID at mga Balanse ay nakabalangkas sa ibaba. Tandaan na ang mga resulta ay sensitibo sa partikular na string format ng mga balanse, gaya ng ipinapakita sa pahina ng mga Audit.

  • 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)

Ang mga partikular na halimbawa ay ipinapakita din sa mga snippet ng code sa ibaba. Ang resulta ng Merkle Leaf ay makikita rin sa detalye ng audit upang makatulong na kumpirmahin na naayos mo ito nang tama.

python

Python

import hashlib

account_code = "3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db"
iiban = "AA45N84GGNZ6ZZAA"
audit_id = "PR30SEP21"
record_id = hashlib.sha256(
    (account_code + iiban + audit_id).encode('utf-8')).hexdigest()

balances = "BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4"

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 = "3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db";
const IIBAN: &str = "AA45N84GGNZ6ZZAA";
const AUDIT_ID: &str = "PR30SEP21";
const BALANCES: &str = "BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4";

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 := "3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db"
	iiban := "AA45N84GGNZ6ZZAA"
	auditId := "PR30SEP21"

	secret := accountCode + iiban + auditId

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

	balances := "BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4"

	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="3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db"
IIBAN="AA45N84GGNZ6ZZAA"
AUDIT_ID="PR30SEP21"
RECORD_ID=$(echo -n "${ACCOUNT_CODE}${IIBAN}${AUDIT_ID}" | sha256sum | head -c 64)
BALANCES="BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4"
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)"

Mga Pagkukulang at Mga Pagpapaunlad sa Hinaharap

Sa layuning itaguyod ang transparency, gusto naming ibahagi ang ilan sa mga pagkukulang sa proseso ng Proof of Reserves na aming’ve natukoy.

  • Ang isang Proof of Reserves ay nagsasangkot ng pagpapatunay ng kontrol sa mga on-chain na pondo sa oras ng pag-audit, ngunit hindi maaaring patunayan ang eksklusibong pagmamay-ari ng mga private key na maaaring ayon sa teorya ay na-kopya ng isang umaatake.
  • Ang pamamaraan ay hindi maaaring matukoy ang anumang mga nakatagong sagabal o patunayan na ang mga pondo ay hindi hiniram para sa mga layunin na maipasa ang audit. Katulad nito, maaaring nawala ang mga key o nanakaw ang mga pondo mula noong pinakabagong pag-audit.
  • Dapat na may kakayahan at independiyente ang auditor upang mabawasan ang panganib ng pandaraya sa bahagi ng auditee, o banggaan sa pagitan ng mga partido.

Sinisikap naming pagaanin ang ilan sa mga pagkukulang na ito sa pamamagitan ng pakikipag-ugnayan sa mga iginagalang, independiyenteng mga third party na kumpanya para sa aming Proof of Reserves, at pagsasagawa ng mga audit na ito ng regular at madalas.

*Tandaan: Walang pormal na mga alituntunin ang kayang tumukoy sa pag-audit ng proof of reserves. Nakipag-ugnayan kami sa isang independiyenteng accounting firm upang magsagawa ng pagpapatunay na pakikipag-ugnayan sa ilalim ng mga pamantayang itinakda ng American Institute for Certified Public Accountants at mag-isyu ng Independent Accountant's Report on Agreed Upon Procedures. Kasama sa mga ulat na ito ang mga partikular na pamamaraang isinagawa ng kumpanyang iyon pati na rin ang kanilang mga napag-alaman.

Proof of Reserves