## Generic Security Controls
Uctan uca guvenlik kontrolleri dahil olarak ornek
### For HttpGet
-
### For HttpPost/HttpPut/...
```plantuml
@startuml
participant Uygulama as client
participant "Güvenlik SDK" as ssdk
participant "Secure Server\nAPI Gateway" as ss
participant "Dijital Bankacılık\n Middleware" as amorphie
collections "Temel Sistemler" as backend
client -> ssdk: Hesap Açma İsteği
ssdk -> ss: Hesap Açma İsteği
ss -> amorphie: Token Sorgulama İsteği
amorphie -> ss: Token Sorgulama Yanıtı
ss -> amorphie: JWS İmza Kontrolü
amorphie -> ss: JWS İmza Kontrolü Tamam
ss -> amorphie: İzin ve Yetki Kontrolü
amorphie -> ss: İzin ve Yetki Tamam
ss -> backend: Hesap Açma İsteği
backend -> ss: Hesap Açma Yanıtı
ss -> ssdk: Hesap Açma Yanıtı
ssdk -> client: Hesap Açma Yanıtı
@enduml
```
## Enrollment (First Login)
```plantuml
@startuml
participant Uygulama as client
participant "Güvenlik SDK" as ssdk
participant "Secure Server API Gateway" as ssag
participant "Dijital Bankacılık Platformu" as amorphie
participant "Hashicorp Vault" as hv
client -> ssdk : Guvenlik SDK başlat.
ssdk-> ssdk: Güvenlik sensörlerini başlat.
note right
Güvenlik sensörleri sürekli olarak bu andan itibaren uygulamayı ve cihazı izleycektir.
Riskli bir girişim bulduğu anda oturum sonlandırılacaktır.
end note
ssdk o<-[#0000FF]>o ssag: Başarılı 2FA Login Akışı
ssdk-> ssdk: İmzalama için asimetrik anahtarları oluştur. \n(Keystore-Android,Secure Enclave-iOS)
ssdk->ssag: İmzalama genel anahatarını gönder.
ssag-->ssag: Güvenlik kontrolleri
note right #aqua
Tüm isteklerde güvenlik kontolleri tekrarlanır.
end note
ssag->amorphie: Genel Anahtarı gönder
amorphie->amorphie: Genel anahtarı kullanıcı özelinde kaydet.
amorphie->hv: Şifreleme için sertifika Oluştur
hv->hv: Kuruluma özel mTLS Sertifikasını oluştur.
hv->amorphie: mTLS Sertifikasını ve anahtarları ilet
amorphie->amorphie: Genel anahtarı ve sertifikayı kurulum özelinde kaydet.
amorphie->ssag: mTLS Sertifikasını ve özel anahtarı ilet
ssag->ssdk: mTLS Sertifikasını ve özel anahtarı ilet
amorphie->amorphie : Özel anahtarı sil (unut).
ssdk->ssdk: mTLS Sertifikasını ve özel Anahtarı \n güvenli alana kaydet
ssdk->client: Kayıt başarılı
ssdk o<-[#green]>o ssag: MTLS Bağlantısını kur.
note right
Bu andan sonra;
- Tüm bağlantılar mTLS kurulu olacaktır.
- Tüm istekler imzalı olacaktır.
end note
@enduml
```
## Login
```plantuml
@startuml
participant Uygulama as client
participant "Güvenlik SDK" as ssdk
participant "Secure Server\nAPI Gateway" as ss
participant "Dijital Bankacılık\n Middleware" as amorphie
collections "Temel Sistemler" as backend
group Kullanıcı Giriş Adımları Başarılı
end
client->amorphie: Giriş onay istek
amorphie->amorphie: Nonce değeri oluştur
amorphie->amorphie: Kullanıcı Public Key db oku
amorphie->amorphie: Nonce değerini \nKullanıcı Public Key ile şifrele - \nKullanıcıdan gelen
amorphie->ssdk: Şifrelenmiş bilgileri gönder
ssdk->ssdk: Secure Element üzerinden şifrelenmiş nonce çöz
ssdk->ssdk: Secure Element üzerinden private key ile nonce imzala
ssdk->amorphie: İmzalı bilgileri gönder
amorphie->amorphie: Kullanıcı Public Key ile imzayı onayla
amorphie->ssdk: Giriş başarılı
ssdk->client: Giriş başarılı
client<->backend: Güvenli bağlantı sağlandı
@enduml
```
## Transaction Signing in Detail
```plantuml
@startuml
participant Uygulama as client
participant "Güvenlik SDK" as ssdk
participant "Secure Server\nAPI Gateway" as ss
participant "Dijital Bankacılık\n Middleware" as amorphie
collections "Temel Sistemler" as backend
group Finansal Sonuç Doğuran İşlemler
end
client->amorphie: Finansal işlem onay istek
amorphie->amorphie: Nonce değeri oluştur
amorphie->amorphie: Kullanıcı Public Key db oku
amorphie->amorphie: Nonce değerini \nKullanıcı Public Key ile şifrele - \nKullanıcıdan gelen
amorphie->ssdk: Şifrelenmiş bilgileri gönder
ssdk->ssdk: Secure Element üzerinden şifrelenmiş nonce çöz
ssdk->ssdk: Secure Element üzerinden private key ile nonce imzala
ssdk->amorphie: İmzalı bilgileri gönder
amorphie->amorphie: Kullanıcı Public Key ile imzayı onayla
amorphie->ssdk: Onay başarılı
amorphie->backend: Onay başarılı
backend->backend: İşlemi gerçekleştir
backend->ssdk: İşlem başarılı
ssdk->client: İşlem başarılı
@enduml
```
### Full Flow
### 3FA Subflow
## Document Signing in Detail
```plantuml
@startuml
participant Uygulama as client
participant "Güvenlik SDK" as ssdk
participant "Secure Server\nAPI Gateway" as ss
participant "Dijital Bankacılık\n Middleware" as amorphie
amorphie->amorphie: Dokuman hash oluşturulur
amorphie->amorphie: Dokuman bilgileri db kaydedibilir
amorphie->client: Dokuman bilgisi response
client-> ssdk: Kullanıcı Dokumanı onaylar
ssdk->ssdk : Dokumanın Hash alınır ve \n kullanıcı device private key ile imzalanır
ssdk->ssdk : Dokuman Pades ile imzalanır
ssdk->amorphie: Dokuman onay kontrolu
amorphie->amorphie: Dokuman hash kontrol
amorphie->amorphie: Dokuman imza kontrol
amorphie->amorphie: Dokuman Pades kontrol
@enduml
```
## API Gateway Log ve Telemetri Akisi