## Genelge uyumluluğu için sunum outline
### 1 - Genel Mimari
> Öncelikle bankanın işlem imzalamada kullanılmak üzere, mobil uygulaması içinde
bu işlemlere özgü güvenli bir ortam yaratmak ve BSEBY’nin 34 üncü maddesinin on
beşinci fıkrasından kaynaklanan yükümlülüklerini yerine getirmek üzere
i. Spesifik bir Yazılım Geliştirme Kiti (SDK) ve
ii. Doğrudan bu SDK ile güvenli ayrı bir kanaldan iletişim kuracak şekilde
yapılandırılmış bir Güvenlik Sunucusu (SS)
oluşturması gerekmektedir
* SDK ve SS icin ilgili bilesenlerin adreslenerek genel mimari cizimi.
- [ ] amoprhie.flutter.shield ile ayri bir pakete ayrismasi
- [x] amoprhie.shield ile ayri bir pakete ayrilmasi
### 2 - Enrollment Sureci
>İşlem imzalamada kullanılacak müşteriye özgü şifreleme gizli anahtarı ile buna
karşılık gelen açık anahtarın(asimetrik anahtar çiftinin), müşterinin mobil bankacılık
uygulamasının yüklü olduğu mobil cihazında bulunan ve asimetrik anahtar çifti
oluşturabilen ve oluşturulan anahtar çiftlerinden şifreleme gizli anahtarını
kopyalanmaya ve dışarıya çıkarılmaya imkan vermeyecek şekilde saklayabilen (iOS
cihazlar için “Secure Enclave”, Andorid cihazlar için “hardware backed keystore” ya
da “Strong Box” gibi) kriptografik donanım biriminde SDK tarafından oluşturulması
ve SDK tarafından müşteriye özgü olarak oluşturulan şifreleme gizli anahtarının bu
donanım birimlerinde saklanması ve imzalama işlemi için yalnızca SDK tarafından
kullanılabiliyor olması gerekmektedir. Şifreleme gizli anahtarının “müşteriye özgü”
olması, müşteriye bağlanmış (binded) mobil cihaza ve o cihaz üzerindeki
aktifleştirilmiş SDK örneğine (instance) özgülenmiş bir gizli anahtar olmasını ifade
eder. Asimetrik anahtar çifti oluşturmada kullanılacak algoritmaların ve anahtar
uzunluklarının, BSEBY’nin 9 uncu maddesinin ikinci fıkrası çerçevesinde günün
teknolojine uygun olarak seçilmesi zorunludur.
* Enrollment sureci detayli
* Kullanilan algoritma ve teknikler
* Mobil tarafta key generation
* Server tarafina iletme
* Serverda key uretme, clienta iletme
* Gateway processing sureci
* JWS hash kontrolleri
* mtls/sifreleme isleri
- [ ] Client tarafta asimetrik anahtar olusturma
- [ ] Client public key sunucuya iletme; grant flow ile ve saklama
- [ ] Server tarafta root certifika ile kuruluma anahtar olusturma
- [ ] Server public key istemciye iletme; grant flow ile ve saklama
### 3 - Device Kontrol & Imzalama
> SDK tarafından müşteri mobil cihazı üzerindeki kriptografik donanım birimine
ürettirilen ve yalnızca SDK tarafından imzalama işleminde kullanılabilen müşteriye
özgü şifreleme gizli anahtarı için gelecek “imzala işlemi taleplerinin” yalnızca
SS’nin gerçekleştireceği güvenlik kontrolleri sonrası ve yalnızca 2. maddede
belirtilen asimetrik anahtar çiftlerinden müşteriye özgü şifreleme gizli anahtarının
diğer çifti olan müşteriye özgü açık anahtar ile şifrelenmiş bir şekilde müşteri için
aktifleştirilmiş SDK örneğine SS tarafından gönderilmesi sağlanmalıdır.
* transaction sureci detayli akis
* Kullanilan algoritma ve teknikler
* encyiption
* Workflow instacing ve authorization
* Gateway processing sureci
* JWS hash kontrolleri
* Decryption
- [ ] IHS sdk entegrayonunun yapilmasi
- [ ] Workflow Manager icerisinde ihs sdk fonksiyonu ile guvenlik kotnrollerinin yapilasi.
- [ ] transition body'nin client sertifika ile encript edilmesi
### 4 - amoprhie.flutter.shield & IHS
> SS’nin ilgili SDK örneğine imzalama talebinde bulunabilmesi için, ilgili SDK
örneğinin arka planda sürekli bir şekilde çalışan güvenlik sensörleri yoluyla güvenli
mobil uygulama ve güvenli mobil cihaz üzerinde çalıştığını teyit edecek güvenlik
kontrollerini gerçekleştirmesi gerekmekte ve bu güvenlik sensörlerinden sağlanacak
risk verileri SDK ile SS arasındaki tahsisli güvenli ayrı bir kanaldan (Out-of-Band)
SS’ye iletilmelidir.
SDK’nin güvenlik sensörleri, BSEBY’nin 34 üncü maddesinin on beşinci fıkrasına
uygun olacak şekilde, sürekli bir biçimde asgari olarak aşağıdaki kontrolleri
sağlayarak SS’ye iletilmek üzere gerekli risk verilerini oluşturmalıdır:
i. Mobil uygulama güvenilirliğinin ve bütünlüğünün bozulmasına ilişkin
kontroller,
a) Hassas verilerin kullanıcı arayüzü üzerinden girilmesi esnasında
çalınmasını engellemeye yönelik kontroller (anti-keylogging)
b) Çalışmakta olan SDK kodunun çalışma anında değiştirilmediğine
ve araya zararlı kod parçalarının eklenmediğine ilişkin kontroller
(anti-injection)
c) Çalışmakta olan SDK kodunun debugger ortamında, emülatör
ortamında ya da sanal makinede çalışmakta olup olmadığına
ilişkin kontroller (anti-debugging ve anti-emulation)
d) Aktive edilmiş mobil bankacılık uygulaması ve SDK’nin yalnızca
aktivasyon sırasında kaydedilmiş mobil cihaz üzerinde çalıştığına
ilişkin kontroller (device-binding)
ii. Mobil cihaz güvenilirliğinin ve bütünlüğünün bozulmasına ilişkin
kontroller,
a) Mobil cihazın zararlı yazılım barındırıp barındırmadığı ya da bu
yazılımlarca ele geçirilip geçirilmediğine ilişkin kontroller (antimalware),
b) Mobil cihaz işletim sisteminin kırılıp kırılmadığına (jailbreaking)
ilişkin kontroller
* IHS urunnun yetkinlikleri ve calisma mekanizmasi
* flutter.shield sdk sinin ihs ile birlikte calismasi
* urunlerin end point bilgileri.
- [ ] flutter.shieldin ihs sdksi icerecek sekilde calismasi.
### 5 - Server Anahtarlari
> SS ile SDK arasındaki kanalın güvenliğinin sağlanabilmesi için, mobil bankacılık
uygulaması ve SDK’nin ilk aktivasyonu sırasında, henüz aktive edilmemiş SDK
örneği ile SS arasında SS’nin sunucu sertifikası yoluyla güvenli bir TLS bağlantısı
kurulması sağlanmalı ve sonrasında aktivasyonu gerçekleşen SDK örneği ve mobil
cihaza özgü olacak şekilde SS tarafından üretilen asimetrik anahtar çiftlerinden
şifreleme gizli anahtarının bu güvenli bağlantı üzerinden ilgili SDK örneğine
iletilmesi ve SDK kontrolündeki güvenli bir alanda şifrelenmiş bir şekilde
saklanması sağlanmalıdır. SS tarafından aktivasyonu gerçekleşen SDK örneği için
üretilen asimetrik anahtar çiftlerinden “gizli” olanı SS tarafından saklanmamalı ve
ilgili SDK örneğine iletilir iletilmez silinmeli, söz konusu anahtar çiftlerinden “açık”
olanı ise SS tarafından imzalanarak ilgili SDK örneğine atanmış bir istemci
sertifikasına dönüştürülmek suretiyle söz konusu güvenli bağlantı üzerinden ilgili
SDK örneğine iletilmelidir. Bu adımlar sonrasında ilgili SDK örneği ile SS
arasındaki iletişimde söz konusu sunucu ve istemci sertifikalarının kullanılması
yoluyla çift yönlü kurulacak bir mTLS bağlantısı (Mutual TLS) üzerinden uçtan uca
güvenli bir iletişim kanalının tesis edilmesi ve bu iletişim kanalının mobil bankacılık
uygulaması ile banka arkayüzü (back-end) arasındaki iletişim kanalından ayrı ve
yalnızca SS ve SDK arasındaki iletişime tahsisli güvenli ayrı bir kanal (Out-of-Band)
olarak yapılandırılması sağlanmalıdır. Asimetrik anahtar çifti oluşturmada
kullanılacak algoritmaların ve anahtar uzunluklarının, BSEBY’nin 9 uncu
maddesinin ikinci fıkrası çerçevesinde günün teknolojine uygun olarak seçilmesi
zorunludur.
* Server anahtarlari olsuturma ve client iletisimi akisi
* Root sertifika saklama ve kullanim bilgileri
* Algoritma ve teknik detaylar
* Guvenli kanal - Servis endpoint bilgileri, nasil ayristigi.
- [ ] Security endpointler icin ayri bir apisix kurulumu mu acaba ?
### 6 - Login
> 7. Her bir SDK örneğinin(instance), ancak 5. maddede belirtilen güvenlik sensörleri
üzerinden oluşturduğu risk verileri üzerinden SS’nin güvenilirlik ve bütünlük
kontrollerinden geçmiş olması kaydıyla, SS’nin kendisine atadığı istemci sertifikası
yoluyla 6. maddede belirtilen şekilde kurulmuş olan uçtan uca güvenli bir iletişim
kanalı üzerinden, müşterinin girdiği PIN/bilinen unsuru için SS’e doğrulama isteği
gönderebilmesi sağlanmalıdır.
> 8. Mobil bankacılık uygulaması ve SDK’nın ilk aktivasyonu sırasında,
i. Müşterinin “bildiği unsur” olarak kullanacağı PIN ya da parolanın, SDK
tarafından kriptografik özet (hash) haline dönüştürülerek SS’ye
gönderilmesi ve bu kriptografik özetin tuzlanmış özet (salted-hash) haline
dönüştürülerek SS veritabanında şifrelenmiş bir şekilde saklanması;
ii. Aktifleştirilmiş SDK örneğinin 2. madde uyarınca müşteriye özgü asimetrik
anahtar çifti oluşturması ve bu anahtarlardan “açık” olanını SS’ye iletmesi,
iii. SS’nin aynı zamanda bir “Sertifika Otoritesi” rolü oynayarak,
aktifleştirilmiş SDK örneği tarafından müşteriye özgü olarak kendisine
iletilen açık anahtar için müşteriye özgü bir sertifika üretmesi, müşteri
tarafından imzalanan içeriğin teyidi için bu sertifikayı kullanması ve SDK
örneğinin kullanım dışı bırakılması gereken durumlarda söz konusu
sertifikayı geçersiz hale getirmesi
gerekmektedir
> 9. Sekizinci maddede belirtilen PIN/bilinen unsur bilgisi ya da bu unsura ilişkin kriptografik özet (hash) verisi SDK tarafında hiçbir şekilde saklanmamalı ve doğrulama isteğinin gönderilmesini müteakip derhal SDK tarafında silinmeli ve SS veritabanında da
PIN/bilinen unsur ya da bu unsura ilişkin kriptografik özet (hash) verisi hiçbir şekilde
açık bir şekilde (plain text) saklanmamalı, söz konusu veritabanında SDK tarafından
gönderilen hash verisi, tuzlanmış özet (salted-hash) haline dönüştürülerek SS
veritabanında yalnızca şifrelenmiş bir şekilde tutulmalıdır.
> 10. SDK’nın SS’ye göndereceği PIN/bilinen unsur için doğrulama isteği, işbu Genelge
ekinde yer verilen açıklamaların 1.bölümünde de belirtildiği üzere ve BSEBY’nin 11
inci maddesinin üçüncü fıkrasına uygun olarak, müşterinin girdiği PIN/bilinen
unsurun hash halinin SS veritabanında bulunan salted-hash hali ile karşılaştırılması
yoluyla çevrimiçi doğrulanmalıdır.
* Login akisi
* Passord Hashing teknik ve detaylari
* DB level passpord store teknik ve detaylari
- [ ] Client tarafinda passwordung haslenerek iletilmesi.
### 7 - Islem Guvenligi
> 11. Müşterinin PIN/bilinen unsur doğrulama işleminin 10. maddede belirtildiği şekilde
başarıyla gerçekleşmesi halinde,
i. SS ve SDK arasındaki tahsisli güvenli kanal üzerinden SS’nin 3. ve 8.
maddede belirtilen müşteriye özgü sertifikadaki açık anahtar ile şifrelenmiş
bir şekilde SDK’ye kimlik doğrulamaya yönelik bir “işlem imzalama talep
mesajı” (challenge) göndermesi,
ii. SDK tarafından alınan bu mesajın ise müşteri mobil cihazının kriptografik
donanım biriminde bulunan müşteriye özgü şifreleme gizli anahtarı ile
açılmak suretiyle, SDK’nın kimlik doğrulamaya yönelik bir “işlem
imzalama onay mesajını” (response) aynı anahtarla imzalayarak kimlik
doğrulamaya yönelik bir doğrulama kodu oluşturması ve bunu SS’e
göndermesi,
iii. SS’in, SDK’dan kendisine iletilen doğrulama kodunu müşteriye özgü açık
anahtar ile açarak doğruluğunu teyit etmesi,
iv. Teyit edilmiş doğrulama kodu için SS’in banka arkayüzü (back-end) ile
arasındaki uçtan uca güvenli iletişim kanalından back-end’e kullanıcıyı
içeriye alması (login) yönünde mesaj iletilmesi ve bu mesaj sonrasında
back-end’in kullanıcıyı içeriye alması (login) ,
v. Bu aşamaların tamamlanmasını müteakip ilgili doğrulama kodu için zaman
damgası oluşturularak banka log sunucusuna aktarılması
sağlanmalıdır. Challenge-Response mesajlarının tekrarlama (replay) saldırılarını
engellemek üzere tek kullanımlık bir değer (nonce) içermesi zorunludur.
> 12. Müşteri mobil cihazının kritptografik donanım biriminde bulunan ve yalnızca
aktifleştirilmiş SDK örneği tarafından kullanılabilen müşteriye özgü şifreleme gizli
anahtarı yoluyla,
i. SDK tarafından üretilen kimlik doğrulamaya yönelik doğrulama kodunun,
ii. SDK tarafından müşteriye gösterilen bilgiler üzerinden müşterinin
onayladığı tutar ve alıcı bilgisine göre spesifik olacak şekilde, SDK
9
tarafından finansal sonuç doğuran işlemler için üretilen doğrulama
kodunun,
iii. SDK tarafından müşteriye gösterilen bilgiler üzerinden müşterinin onayını
ve irade beyanını yansıtan elektronik ortamda kurulacak sözleşmelerin
müşteri tarafından elektronik imzalı olarak imzalanması sağlanmalıdır.
> 13. onikinci madde çerçevesinde finansal sonuç doğuran işlemler ile elektronik ortamda
sözleşme kurulmasına ilişkin (12.ii ve 12.iii) SDK tarafından imzalanmak üzere
müşteriye içerik gösterilmesi öncesinde, müşterinin başlattığı işlemlerin mobil
bankacılık uygulaması tarafından öncelikle back-end sunucusuna iletilmesi ve backend sunucusunun bu müşteri talebini doğrulanmak üzere uçtan uca güvenli kanaldan
SS’e iletmesi gerekmektedir. Back-end’den SS’e müşteri talebinin iletilmesi
sonrasında bu talebe ilişkin;
i. SS ve SDK arasındaki tahsisli güvenli kanal üzerinden SS’nin 3. ve 8.
maddede belirtilen müşteriye özgü sertifikadaki açık anahtar ile şifrelenmiş
bir şekilde SDK’ye “işlem imzalama talep mesajı” (challenge) göndermesi,
ii. SDK tarafından alınan bu mesajın ise müşteri mobil cihazının kritptografik
donanım biriminde bulunan müşteriye özgü şifreleme gizli anahtarı ile
açılmak suretiyle ve yine SDK tarafından müşteriye gösterilecek şekilde bir
onay ekranı çıkarması,
iii. SDK tarafından müşteriye gösterilen onay ekranındaki bilgilerin müşteri
tarafından onaylanması halinde, onaylanan bu bilgiler için SDK’nın,
müşteriye özgü şifreleme gizli anahtarı ile “işlem imzalama onay mesajını”
(response) imzalayarak bir doğrulama kodu oluşturması ve bunu SS’e
göndermesi,
iv. SS’in, SDK’dan kendisine iletilen doğrulama kodunu müşteriye özgü açık
anahtar ile açarak, back-end’den iletilen bilgiler ile karşılaştırmak suretiyle
bu bilgilerin değişmediğine ilişkin bütünlük kontrolünü gerçekleştirmesi ve
bilgilerin doğruluğunu teyit etmesi,
v. Teyit edilmiş doğrulama kodu için SS’in banka arkayüzü (back-end) ile
arasındaki uçtan uca güvenli iletişim kanalından back-end’e ilgili işlemi
gerçekleştirmesi yönünde mesaj iletilmesi ve bu mesaj sonrasında backend’in kendisi için doğrulama kodu oluşturulmuş işlemi gerçekleştirmesi,
vi. Bu aşamaların tamamlanmasını müteakip ilgili doğrulama kodu için zaman
damgası oluşturularak banka log sunucusuna aktarılması
sağlanmalıdır. Challenge-Response mesajlarının tekrarlama (replay) saldırılarını
engellemek üzere tek kullanımlık bir değer (nonce) içermesi zorunludur
* Transaction flow detayli akisi (workflow transition)
* anahtarlarin kullandigi noklara, ency/decr icin
* nonce, change/response akisi
* Dogrulama kodu (mobile push/otp) mekanizmasi, sub flow akisi
### 8 - Access & Refresh Token
> 14. x10. madde çerçevesinde PIN/bilinen unsurun doğrulaması, 11. madde çerçevesinde
de müşterinin sahip olduğu unsur niteliğindeki müşteriye özgü şifreleme gizli
anahtarı yoluyla geçerli bir doğrulama kodu oluşturulması sonrasında gerçekleşecek
iki bileşenli kimlik doğrulamaya dayalı login işlemini müteakip açılan kullanıcı
oturumunun geçerli olduğu süre boyunca,
i. SDK tarafından müşteriye gösterilen bilgiler üzerinden müşterinin
onayladığı tutar ve alıcı bilgisine göre spesifik olacak şekilde, SDK
tarafından finansal sonuç doğuran işlemler için üretilen doğrulama
kodunun,
ii. SDK tarafından müşteriye gösterilen bilgiler üzerinden müşterinin onayını
ve irade beyanını yansıtan elektronik ortamda kurulacak sözleşmelerin 12. maddeye uygun olarak müşteriye özgü şifreleme gizli anahtarı ile imzalanması
sürecinde müşterinin yeniden PIN/bilinen unsur doğrulaması yapması
gerekmemektedir. BSEBY’nin 39 uncu maddesinin üçüncü fıkrası uyarınca
müşterinin iki bileşenle kimlik doğrulama gerçekleştirerek açtığı son oturumun
üzerinden 90 günden daha fazla bir süre geçmemiş olması kaydıyla yalnızca sahip
olunan kimlik doğrulama unsuru ile gerçekleştirilebilen işlemler için PIN/bilinen
unsur doğrulamasının tekrar yapılması gerekmemekle birlikte, söz konusu fıkra
uyarınca gerçekleştirilecek login işlemleri ile finansal sonuç doğuran işlemler için
müşteriye özgü şifreleme gizli anahtarı yoluyla 11. ve 13. maddelere uygun olarak
doğrulama kodu oluşturulması zorunludur.
* Access ve refresh token bilgileri. exp, claimler
* Lifecyle akisi
* 90 gun kontrolu, cihaz eslestirme kaldirma detaylari
* jwt validation, outh2 konulari
* teknik bilgiler rfc ler
* ency/decry
### 9 - Document Signing
> 14. Madde ..... https://www.bddk.org.tr/Mevzuat/DokumanGetir/1171
* Contrat akisi/altyapisi
* Pades
* Zaman damgasi