SSI Türkiye
SSI Türkiye
SSI Türkiye dijital kimlik altyapısı, yeni nesil dijital kimlik yönetim modeline uygun olarak işletilen, kendi topluluğu tarafından yönetilen bir altyapıdır.
SSI Türkiye iki adet Hyperledger Indy ağı içermektedir.
Ağ kullanım örneklerine buradan ulaşabilirsiniz.
Hyperledger Indy hakkında bilgi edinmek için aşağıdaki linkleri kullanabilirsiniz.
Hakkında
SSI Türkiye Platformu, yeni nesil dijital Kullanıcı Egemen (Self Sovereign) kimlik yönetimi modeline uygun olarak işletilen, kendi topluluğu tarafından yönetilen bir dijital kimlik altyapısıdır. Kamu ve Özel sektör Dijital Dönüşüm projelerinde kullanım amacıyla başlatılmıştır.
Altyapı, geliştiricilere hizmet eden bir test ağı (TestNet) ve geliştirilen nihai Dijital Kimlik ürünlerinin faydalanabileceği bir kamuya açık ağı (PublicNet) içermektedir.
Uluslararası DIDMethod olarak da görülebilir olmasını sağlayacak kayıt süreci devam etmektedir.
İlk sürümü (v1.0) 2023 yılı Kasım ayında kurulmuştur.
Veri ekonomisi ve Yönetişim eksenli yeteneklerin bulunacağı v2.0 geliştirme aşamasındadır.
Platforma üye olma talepleri, Platformun kurumsal süreçlerinin inşaası taamlanıncaya kadar bzlab@tubitak.gov.tr adresine gönderilmektedir. Mevcut sürümde üyelik talepleri, altyapının yönetiminde rol almak (Steering Committe Member), PublicNet blokzincir ağında doğrulayıcı düğüm işletmek (Steward) ve altyapıya veriyazma (Trust Anchor) yetkilerinden biri veya bir kaçı için yapılabilmektedir.
Altyapıdaki verileri okuma işlevi, bütün kamuya izin veya üyelik gerektirmeksizin açıktır.
Üyeler
Üye Kurum | Rol | Sunumlar |
---|---|---|
TÜBİTAK BİLGEM | Trustee | Aktif |
Yapı Kredi Bankası | Steward | Aktif |
Sabancı Üniversitesi | Steward | Kuruluyor |
AyroTek | TrustAnchor | Kuruluyor |
Üye1 (Banka) | Steward | Başvuru… |
Üye2 (Özel Şirket) | TrustAnchor | Başvuru… |
Üye3 (Banka) | Steward | Başvuru… |
Üye4 (Kamu Kurumu) | Steward | Başvuru… |
Üye5 (Banka) | Steward | Kuruluyor |
Kaynaklar
- Kurulum
- Kullanım Örnekleri
- Teknolojiler Hakkında Bilgi
SSITürkiye Altyapısında güncel ortalama Validator Düğüm Makinası gereksinimleri aşağıdaki gibidir
- Yeterli işlemci gücü (8+ çekirdek)
- RAM (>32 GB)
- Depolama (En az 1 TB güvenilir (örneğin RAID) disk alanı -2TB’a artırırlabilir olmalı. Yeterli büyüklükte boot portion olmalı
- Yüksek hızlı ve Internet bağlantısı (+100Mbps) (highly available, redundant pipes).
- 2 adet kendi ayrı statik IP adresleri olan NIC (Network Interface Card)
- 1 NIC Validator Node konsensus trafiği için tahsis edilmiş olmalı
- 1 NIC harici istekleri karşılamak üzere tahsis edilmiş olmalı
Daha detaylı Indy kullanım örneklerine Indy SDK reposundan ulaşılabilir.
Aşağıdaki örnekleri ssi-turkiye-docs reposunda da bulabilirsiniz.
Test ağını BILGEM-DID-SDK ile de kullanabilirsiniz. İlgili SDK dokümantasyonuna bu sayfadan ulaşabilirsiniz sdk.did.bag.org.tr.
Indy SDK ile SSI Türkiye Testnet’den transaction okunması.
$ python3 query_ledger.py
# https://github.com/hyperledger/indy-sdk/blob/main/docs/how-tos/write-did-and-query-verkey/python/write_did_and_query_verkey.py
# query_ledger.py
import asyncio
import json
import pprint
from indy import pool, ledger, wallet, did
from indy.error import IndyError, ErrorCode
from utils import get_pool_genesis_txn_path, PROTOCOL_VERSION
pool_name = "ssi-turkiye-testnet"
genesis_file_path = get_pool_genesis_txn_path(pool_name)
wallet_config = json.dumps({"id": "wallet"})
wallet_credentials = json.dumps({"key": "wallet_key"})
def print_log(value_color="", value_noncolor=""):
"""set the colors for text."""
HEADER = "\033[92m"
ENDC = "\033[0m"
print(HEADER + value_color + ENDC + str(value_noncolor))
async def write_nym_and_query_verkey():
try:
await pool.set_protocol_version(PROTOCOL_VERSION)
print_log(
"\n1. Creates a new local pool ledger configuration that is used "
"later when connecting to ledger.\n"
)
pool_config = json.dumps({"genesis_txn": str(genesis_file_path)})
try:
await pool.create_pool_ledger_config(
config_name=pool_name, config=pool_config
)
except IndyError as ex:
if ex.error_code == ErrorCode.PoolLedgerConfigAlreadyExistsError:
pass
print_log("\n2. Open pool ledger and get handle from libindy\n")
pool_handle = await pool.open_pool_ledger(config_name=pool_name, config=None)
request = await ledger.build_get_txn_request(None, None, 1)
print(request)
response = await ledger.submit_request(pool_handle, request)
parsed = json.loads(response)
print_log("response: {}".format(response))
print_log("\n13. Closing wallet and pool\n")
await pool.close_pool_ledger(pool_handle)
except IndyError as e:
print("Error occurred: %s" % e)
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(write_nym_and_query_verkey())
loop.close()
if __name__ == "__main__":
main()
# utils.py
# https://github.com/hyperledger/indy-sdk/blob/main/docs/how-tos/write-did-and-query-verkey/python/utils.py
from pathlib import Path
from tempfile import gettempdir
PROTOCOL_VERSION = 2
def get_pool_genesis_txn_path(pool_name):
path_temp = Path(gettempdir()).joinpath("indy")
path = path_temp.joinpath("{}.txn".format(pool_name))
save_pool_genesis_txn_file(path)
return path
#! Genesis degismis olabilir sitedeki son genesisi kullanin
def pool_genesis_txn_data():
return """ {"reqSignature":{},"txn":{"data":{"data":{"alias":"tbtk1","blskey":"3Fd47gxCTnumCK6tWw67QNvuuTdV5Log98W5zqph47CtPuMGhxquQeQdDtExBTKrf2h34Fzq6n9wDq9sMVosCF57sNAAYXUJ9SPCnLfZi9HGzarzufXzgLdemJd3EfR9L2hYJMCMNedTkGXBEkQoAL2YcgzkgMiTdZMvH6oDgDuPqAn","blskey_pop":"R7ZqdRqyhSMkEzP7BKXJZrooMRTzNXBAQ72sXT2CTe55unygvVw1J1kRGQZT6LcgSUBXfWCxirTWcSzaeAQLmX2rJTNd3B5P9nPjzmLjyo3qxKNnaVMvKLsMpzsJaLniMjHdXeggUbAWPZUSs1cRxVvoviWSmV7cX5EGXLVH913EXH","client_ip":"5.252.204.141","client_port":"9702","node_ip":"10.29.29.2","node_port":"9701","services":["VALIDATOR"]},"dest":"4TzzhKsPCBwTYTnATF9JSRRMcvf5TnWnn5DEncDjeQiN"},"metadata":{"from":"7MnUxhDh56UmUmZGdurvzk"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"266ee63fbf82e0cda7ab6a04caf179265238927625d5a9f029a4eb8dcef888ef"},"ver":"1"}
{"reqSignature":{},"txn":{"data":{"data":{"alias":"tbtk2","blskey":"HxrGvTkTzrLvCotTU2JZfJoCYgsTTpLAB8bkbiqQtPaop6KvZ1qwDwpepBbwjA5ayGiGr3hfesc64knk4FWKqjGYjZNYYTUqtdusT7pJ5j4mPpVaWxJNTnNUm6purJRQjwsnrJMGaVp8e5nSw9rT2dPNdixGXPijP5eNwfrBmCLuWP","blskey_pop":"RKMUNpLptTzHVSEtxhvY8NgsTga2xMntpoVNZbjScLqQjyBVAMk2TxAEdTWJcSS17ADCU2tRtNQCeVh4Z2H54ueicHLRv48tSwJhajMqNSzB5GSQZVJoM73yWBW9sTGTH8yH9jux8upBaGvBk7XWmXqUWEUsXdBL6Ei8JSxe8jFyUK","client_ip":"5.252.204.141","client_port":"9704","node_ip":"10.29.29.3","node_port":"9703","services":["VALIDATOR"]},"dest":"FvM37TPMy4kpkvDcbXb5rVxizEnVFTNre1veeWNdx2EG"},"metadata":{"from":"UNh4syxSLQWWpJxM8JM4og"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"b70ec813929f49260a40783ba85f15906a4e2dd75a487c8c5fde531b6e2be7c1"},"ver":"1"}
{"reqSignature":{},"txn":{"data":{"data":{"alias":"tbtk3","blskey":"2nTYJPkgkAXeZpWLBGxKStcfPGx9n7E6kYiddjudWohc42H2Lzd3BtFpsSRur9YnEVkFPbXLqkArj3g3YuNUv1fxEE2LDU9zRwBL34hT4FZomtgKrACgL72MY943jb7sh5ALpK3PEn3sTDTBvM5zeoKtyw2FvnkNknZe8kMmD5dDVjo","blskey_pop":"RYWHWW3nVuD2sSqQgD7TYfzQCP1nYkbnMFkZeohApesTDYYPN7kNgjzGDzvsjmT1nejd5PbyhEmFJgmkPTCHVtweAeUXZhjqqhWwpFP24iYBC9yGDxyxy9tcHocALpAQknuaSoM38EBpX2J3ZbppM4EKB8eeg7ScD5SVGXWQPN1sMZ","client_ip":"5.252.204.141","client_port":"9706","node_ip":"10.29.29.4","node_port":"9705","services":["VALIDATOR"]},"dest":"F4PVpB9yhddQqPKdqJJqmA9go75DWMJPArXVyiZ5DVFA"},"metadata":{"from":"So2p6V1T1NU8pQEAtC2z1x"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"b3921432e4073d619a57a4b12588cefe5102c6575469264444bb0bc7098de175"},"ver":"1"}
{"reqSignature":{},"txn":{"data":{"data":{"alias":"tbtk4","blskey":"4juqxWyMuYbbYTE5vzxbN747MvxSjfY94SoUZ2MJsS8XxZDp6G2mkYk6tHX3guRF6xq8CYiM3adETrq41NJSWC4pRvHLPsaJsBR2w3tYnnk79kQ8JDZKc272N5G1paNLwVcrEGwRsc2WhERgVbqz1UVXQn1BLrowSX67dRkcMLRwotT","blskey_pop":"Qw7DVjrVe5ujQdLrJXSE3Xu95aroeJiHJXnrVXaC3R4QzzVTdh6NRGP2So3hAmt5hBUCa2taf4JnSGNr6d2sgsCJ5jngdBH7mKTHDFiHyEemvfiGxyXF82ybhQAsCRbr6rknZ1dSn4EZUmfG5iRX1rK5H59wMLwjELGEGnLXdP6Ym5","client_ip":"5.252.204.141","client_port":"9708","node_ip":"10.29.29.5","node_port":"9707","services":["VALIDATOR"]},"dest":"5zsoBCXGjxhKhNY5c2HAQR8A6duKqezGJwrPCojs67op"},"metadata":{"from":"AArF7p2Bckz6qwzoEHeRSP"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"c4649f64b28ab9935f77368e3805b841af30e1363c4971836036bbd7aa7f2fee"},"ver":"1"}"""
def save_pool_genesis_txn_file(path):
data = pool_genesis_txn_data()
path.parent.mkdir(parents=True, exist_ok=True)
with open(str(path), "w+") as f:
f.writelines(data)
Hyperledger Indy hakkında bilgi edinmek için aşağıdaki linkleri kullanabilirsiniz.
DID SDK Hakkında Bilgi için
Blokzincir Ağları
Publicnet
SSI Türkiye Publicnet’e bağlanmak için genesis dosyasını kullanabilirsiniz.
Publicnet’i explorer.publicnet.ssiturkiye.bag.org.tr web sitesini kullanarak keşfedebilirsiniz.
Ağa Doğrulayıcı (Validator) node eklenmesi
Publicnet’e yeni validator node ekleme adımları aşağıdaki gibidir.
- Node kuracak kullanıcı DID ve Node seed’ini kullanarak node anahtarlarını ve DID’ini oluşturur.
- DID ve verkey trustee’ye iletilir.
- bagyonetici@tubitak.gov.tr adresini kullanabilirsiniz.
- Trustee iletilen DID’i ve verkey’i ledger’a STEWARD rolüyle ekler.
- Artık ledger’a NODE tipinde transaction yazma hakkına sahip olan kullanıcı NODE transaction’unu yapar.
- Kullanıcı node’unu ayağa kaldırı ve ağa validator olarak katılmış olur.
Örnek bir node kurulumu için buradan faydalanılabilir. Indy Node dokümantasyonunu dikkatlice okumanız tavsiye edilir.
Hyperledger Indy SDK kullanımı için Indy SDK How Tos sayfasından yararlanılabilir.
Minimum node gereksinimleri aşağıdaki gibidir.
- Yeterli işlem gücüne sahip olmalıdır 8 core veya daha fazla çekirdeğe sahip işlemci olmalıdır.
- 32 GB RAM yeterli kabul edilecektir.
- En az 1 TB kapasiteli ve 2 TB’ye kadar büyüyebilen güvenilir (RAID’li) disk olmalıdır.
Node işletecek kullanıcıların aşağıdaki dokümanları incelemesi tavsiye edilir.
Testnet
SSI Turkiye Testnet’e bağlanmak için bu genesis dosyasını kullanabilirsiniz.
Testnet’i explorer.testnet.ssiturkiye.bag.org.tr web sitesini kullanarak keşfedebilirsiniz.
Testnet’e DID kaydı yaptırmak için DID ve DID’in verkey’ini bagyonetici@tubitak.gov.tr adresine gönderebilirsiniz.
DID oluşturmak için Indy-CLI‘yı ya da Indy SDK‘yı kullanabilirsiniz.