SSI Türkiye
SSI Türkiye
SSI Türkiye Platformu, yeni nesil blokzincir tabanlı 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. Dijital Türkiye Altyapısı (DTA) blokzincir tabanlı güven deposudur. Kamu ve özel sektör dijital dönüşüm projelerinde kullanılmak üzere TÜBİTAK bünyesinde geliştirilmektedir. Blokzincir Laboratuvarı olarak, 2018 yılından itibaren bu sistemin başlatıcısıyız ve blokzincir tabanlı bileşenlerinin geliştirilmesi ile işletilmesi faaliyetlerini yürütmekteyiz.
Geliştirme faaliyetlerimiz, Cumhurbaşkanlığı Eylem Planı kapsamında, Dijital Dönüşüm Ofisi’nin himayesinde sürdürülmektedir.
Kendi yönetişim modelini çalıştırabilen özgün blokzincir platformumuzu geliştirme çalışmalarımız, BİLGEM E-Kimlik Birimi bünyesinde sürdürülen güvenli Dijital Kimlik Cüzdanı çalışmaları ile eşgüdüm içinde yürütülmektedir.
Sistem, geliştiricilere hizmet eden bir test ağı ile geliştirilen nihai Dijital Kimlik ürünlerinin faydalanabileceği bir kamuya açık ağ (PublicNet) içermektedir. SSI Türkiye’nin uluslararası did:tr DID metodu olarak tanınmasını sağlayacak kayıt süreci tamamlanmak üzeredir.
Platform ile ilgili ayrıntılı bilgilere SSI Türkiye (https://ssiturkiye.bag.org.tr/) sayfasından ulaşabilirsiniz.

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 |
Ziraat Bankası | Steward | Kuruluyor |
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.