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.

  • Geliştirme amaçlı kullanılan Testnet ve
  • Son ürün DID uygulamalarının kullanacağı Publicnet.

Ağ kullanım örneklerine buradan ulaşabilirsiniz.

Hyperledger Indy hakkında bilgi edinmek için aşağıdaki linkleri kullanabilirsiniz.

ssi img 2

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

Altyapının paydaşları aşağıdaki tabloda listelenmektedir.
Ü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

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.

  1. Node kuracak kullanıcı DID ve Node seed’ini kullanarak node anahtarlarını ve DID’ini oluşturur.
  2. DID ve verkey trustee’ye iletilir.
  3. Trustee iletilen DID’i ve verkey’i ledger’a STEWARD rolüyle ekler.
  4. Artık ledger’a NODE tipinde transaction yazma hakkına sahip olan kullanıcı NODE transaction’unu yapar.
  5. 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.