Dokümantasyon · v0.3.0

SealBox referansı

Her komut, her seçenek ve her ayar. Yeni başlıyorsan önce Öğren bölümüne bak.

Kurulum

Python 3.12 ya da üstü gerekir. Windows, macOS ve Linux'ta çalışır.

$ pip install sealbox            # ya da
$ pipx install sealbox           # ayrı bir ortamda, her yerden erişilebilir
$ pip install -e .               # kaynak koddan (repo kökünde)

Bağımlılıklar: cryptography, pydantic, shamir-mnemonic, keyring, bcrypt.

Genel kullanım

sealbox [--lang tr|en] <komut> [seçenekler]
-h, --help
Yardımı göster. Komutsuz sealbox gruplu listeyi gösterir.
-V, --version
Sürümü göster.
--lang {tr,en}
Mesaj dili. SEALBOX_LANG ortam değişkeniyle de verilir. Varsayılan: bilgisayarın dili.
help <komut>
Bir komutun ayrıntısı ve örnekleri (sealbox <komut> --help ile aynı).

Komutlar beş grupta toplanır:

GrupKomutlar
Başlarkeninit, status
Günlük kullanımseal, exec, vault
Ekipteam
Kurtarmarecovery
Githistory, hook

Yanlış yazılan komutta öneri gelir: sealbox sael → "Bunu mu demek istediniz: seal?". Komutlar her IDE'nin terminalinde (VS Code, PyCharm, Eclipse…) aynıdır.

sealbox init

dosya değiştirmez

Projeyi kontrol eder ve sıradaki adımları sırayla söyler. Yeni bir projede ilk çalıştırılacak komuttur.

sealbox init [-w KLASÖR] [-c DOSYA]
-w, --workspace KLASÖR
Proje kökü (varsayılan: bulunduğun klasör).
-c, --config DOSYA
sealbox.toml yolu.
$ sealbox init                # bulunduğun klasördeki projeyi kontrol et
$ sealbox init -w C:\projem   # başka bir klasör

sealbox status

dosya değiştirmez

Kasanın, anahtarın, kurtarma kodunun ve ekibin durumunu gösterir. Sorunlu her satırın yanında yapman gerekeni yazar. Bir şey açılamıyorsa çıkış kodu 1 döner.

sealbox status [-w KLASÖR] [-c DOSYA] [--json]
--json
Betikler ve CI için makinenin okuyabileceği rapor.
$ sealbox status
  ✓ Kasa: 4 değişken, 2 karalanmış veri
  ✗ Kasa anahtarı bu bilgisayarda yok  → sealbox recovery restore
  · Ekip kurulmamış (tek kişi)         → sealbox team init --github <ad>
  ⚠ 2 dosyada açık sır var             → sealbox seal

sealbox seal

dosyaları yeniden yazar

Dosyalardaki parola, token, API anahtarı ve kişisel verileri bulur:

  • Koddaki sırları kasaya taşır, yerine ortam değişkeni okuması yazar (Python os.environ, JS/TS process.env, Java System.getenv).
  • E-posta ve TCKN gibi verileri __SECURE_..__ etiketiyle karalar.
  • .env dosyasını kasaya alır, yerine .env.sealed bırakır.
sealbox seal [-w KLASÖR] [-c DOSYA] [--check] [--json] [yollar ...]
yollar
Dosya ya da klasörler (varsayılan: tüm proje).
--check
Yazma, yalnızca bak. Açık sır varsa çıkış kodu 1.
--json
Raporu JSON olarak bas: satır, sütun ve kategori içerir, değer içermez. Editör eklentisi bunu kullanır.
-w, --workspace
Proje kökü.
-c, --config
sealbox.toml yolu.
$ sealbox seal --check        # yalnızca bak: diskte açık sır var mı?
$ sealbox seal                # tüm projedeki sırları kasaya taşı
$ sealbox seal src/config.py  # yalnızca bir dosya

Proje kökünden çalıştırın. Alt klasörden çalıştırıldığında üstte .env, .git ya da kasa varsa durur, çünkü üstteki .env açıkta kalırdı. O klasörü bilerek seçiyorsanız -w . verin.

Karalaması doğrulanamayan bir dosyaya dokunulmaz, [!] uyarısı verilir ve taramanın geri kalanı devam eder. Karalama yedekleri de kasa anahtarıyla şifrelenir.

sealbox exec

onay ister

Programını kasadaki sırlarla çalıştırır. Önce hangi değerlerin verileceğini gösteren bir onay penceresi açılır. Sırlar yalnızca bu çalıştırmaya ortam değişkeni olarak verilir. Programın çıktısındaki sırlar [GİZLİ:..] olarak basılır.

sealbox exec [-w KLASÖR] -- <komut> [argümanlar...]
-- komut
-- işaretinden sonra çalıştırılacak komut.
-w, --workspace
Proje kökü (varsayılan: kasası olan üst klasör).
$ sealbox exec -- python app.py        # Python
$ sealbox exec -- npm start            # Node.js
$ sealbox exec -- java Main.java       # Java
$ sealbox exec -- mvn spring-boot:run  # Maven / Gradle

Tasarım gereği: Onayı atlatan bir bayrak ya da ortam değişkeni bilerek yok. Çocuk sürecin çıktısı bir borudan geçtiği için etkileşimli ya da renkli terminal programları farklı davranabilir.

sealbox vault

Kasadaki kayıtları yönetir. Değerler hiçbir zaman terminale kendiliğinden yazılmaz. Göstermek ve değiştirmek onay ister. Tüm alt komutlar -w, --workspace alır.

Alt komutKullanımNe yapar
listvault listDeğişken adları ve karalanmış etiketler. Değer göstermez.
revealvault reveal ADDeğeri onay penceresinde gösterir. AD bir değişken ya da __SECURE_..__ etiketi olabilir.
setvault set ADDeğeri değiştirir ya da ekler (değer pencereden sorulur).
exposevault expose ETİKET [--as AD]Karalanmış veriyi programa çalışırken verir. Etiket, kodda os.environ[...] olur. --as ortam değişkeninin adını belirler (varsayılan: atamadan çıkarılır).
removevault remove [AD...] [--unused] [--force]Kayıt siler (onay ister). --unused: hiçbir dosyanın kullanmadığı kayıtlar. --force: dosyada kullanılıyor olsa da sil.
resetvault resetAnahtar kayıpsa ve kurtarma yoksa yeni boş kasa açar. Eskisi kenara kaldırılır.
$ sealbox vault list
$ sealbox vault reveal DB_PASSWORD
$ sealbox vault reveal __SECURE_TCKN_103d…__
$ sealbox vault set DB_PASSWORD
$ sealbox vault expose __SECURE_EMAIL_8f2c…__ --as ADMIN_EMAIL
$ sealbox vault remove --unused

Aynı değer her zaman aynı kayda bağlanır, bu yüzden tekrar mühürlemek kopya oluşturmaz. Bir dosya kaydın etiketini ya da değişken adını hâlâ içeriyorsa kayıt --force olmadan silinmez.

sealbox team

Kasayı arkadaşlarınla paylaşır. Kasa repoya girer. Değerleri yalnızca ekipteki GitHub hesaplarının SSH anahtarları açabilir. Her değişiklikten sonra commit + push et.

Alt komutKullanımNe yapar
initteam init --github ADEkibi kurar, sen sahip olursun. Bu bilgisayarın SSH anahtarı o GitHub hesabında olmalı.
addteam add KULLANICI [--owner]github.com/KULLANICI.keys adresinden açık anahtarları alır ve erişim verir. --owner: sahip olarak ekle.
removeteam remove KULLANICIEkipten çıkarır. Kasa anahtarı (DEK) yenilenir, görmüş olabileceği değerler listelenir.
promoteteam promote KULLANICIÜyeyi sahip yapar.
listteam listÜyeler, rolleri ve SSH parmak izleri.
$ sealbox team init --github benim-adim
$ sealbox team add arkadasim
$ sealbox team add arkadasim --owner
$ sealbox team remove arkadasim
$ sealbox team list
  • Sahip / üye: Sahipler kişi ekleyip çıkarabilir. Kural yazılım düzeyindedir. Kasayı açabilen bir üye teknik olarak başkasına kopya verebilir.
  • Desteklenen anahtarlar: ed25519 (X25519'a çevrilir) ve RSA (OAEP).
  • Şifresiz SSH anahtarı reddedilir. Şifre eklemek için: ssh-keygen -p -f ~/.ssh/id_ed25519. Şifre terminalden değil pencereden sorulur.
  • Bütünlük: team.json'daki her kayıt DEK'ten türetilen anahtarla MAC'lidir. Repoya yazabilen ama DEK'i bilmeyen biri sahte üye ya da rol ekleyemez.

sealbox recovery

Kasa anahtarı kaybolursa (Windows sıfırlama, yeni bilgisayar) kasayı geri açan kurtarma kodu. Kod ve parçalar yalnızca pencerede gösterilir, terminale yazılmaz.

Alt komutKullanımNe yapar
setuprecovery setup [--new]Kurtarma kodu üretir (kullanıcı başına bir kod). --new: var olan kodu yenisiyle değiştir.
sharesrecovery sharesKodu 2-of-3 Shamir parçasına böler (SLIP-39). Herhangi 2'si yeter.
restorerecovery restore [--kit DOSYA]Kod ya da 2 parçayla anahtarı geri getirir. --kit: kasa klasörü de gittiyse kitten.
exportrecovery export DOSYAKurtarma kiti yazar (kilitli DEK + şifreli kasa). Kod olmadan açılmaz.
statusrecovery status [--json]Kurtarma kurulu mu?
$ sealbox recovery setup
$ sealbox recovery shares
$ sealbox recovery export D:\proje.sapkit
$ sealbox recovery restore
$ sealbox recovery restore --kit D:\proje.sapkit

Kurtarma kopyaları ~/.sealbox/recovery/ altındadır, proje klasöründe değil, repoya girmez. Açık yarı saklandığı için yeni projeler kod sorulmadan kurtarmaya kilitlenir.

sealbox history

dosya değiştirmez

Kasadaki değerleri git geçmişinin tamamında arar. Kasaya taşınmadan önce commit edilmiş bir sır eski commit'lerde okunabilir. Değerler ekrana yazılmaz; yalnızca ad, commit ve dosya. Bir şey bulursa çıkış kodu 1.

sealbox history [-w KLASÖR] [--json]
-w, --workspace
Proje kökü.
--json
Raporu JSON bas (editör eklentisi kullanır). Değer içermez.
$ sealbox history
Git geçmişi:
  ⚠ DB_PASSWORD: 2 commit'te açık — uzak sunucuya gönderilmiş
      ilk: 3f9c2e1 2026-10-02, src/config.py
      → servisinden yenile, sonra: sealbox vault set DB_PASSWORD

Push'landıysa paylaşılmıştır: commit uzak bir dalda varsa değer başkasının elinde olabilir. Değeri servisinden yenile; geçmişi yeniden yazmak tek başına yetmez.

sealbox hook

Git'e bir pre-commit kancası kurar: kasadaki bir değer commit'e girmeye çalışırsa commit dosya:satır ile durdurulur. Kazaya karşı emniyet kemeridir; git commit --no-verify onu atlar. Kanca repoya girmez, ekipteki herkes kendi bilgisayarına kurar.

Alt komutNe yapar
installPre-commit kancasını kurar
uninstallSealBox kancasını kaldırır
status [--json]Kanca kurulu mu?
runKancanın çalıştırdığı kontrol (elle de çalıştırılabilir)
$ sealbox hook install
$ sealbox hook status

Ne bulunur, ne yapılır

Ne bulunduNe yapılır
Parola / token / API anahtarı, tam bir string literal (.py, .js, .ts, .java…)Kasaya taşınır. os.environ["DB_PASSWORD"] / process.env.DB_PASSWORD / System.getenv("DB_PASSWORD") olur
Aynı değerin yorumdaki tekrarıYer tutucuyla karalanır
E-posta, TCKN, telefon, IBAN, isimYer tutucuyla karalanır. Program kullanıyorsa vault expose ile ortam değişkeni olur
.envGizli satırlar kasaya taşınır. .env silinir, yerine yalnızca yer tutucu içeren .env.sealed kalır
JSON / YAML / TOML ayar dosyasıKaralanır. Uygulamanın değeri hangi ortam değişkeninden okuması gerektiği raporlanır
Daha büyük bir metnin parçası (ör. URL içinde) ya da desteklenmeyen dilDokunulmaz, [!] uyarısı. Elle taşınmalı
Karalaması doğrulanamayan dosyaDokunulmaz, [!] uyarısı. Taramanın geri kalanı devam eder

Doğrulayıcılar

Yanlış alarmı azaltmak için eşleşmeler doğrulanır: T.C. kimlik no algoritması, e-posta, telefon, Luhn (kart), IBAN (mod-97) ve entropi. Yer tutucular __SECURE_<KATEGORİ>_<128 bit>__ biçimindedir.

Anahtar hiyerarşisi

Kasa anahtarı (DEK) tek bir yerde durursa, o yer kaybolduğunda kasa açılamaz. Bu yüzden DEK'in birden fazla kilidi vardır (zarf şifreleme, envelope encryption):

Kurtarma kodu (128 bit) ─Argon2id (64 MiB, t=3, p=4)─► Recovery KEK = X25519 ─┐
GitHub SSH anahtarı (ed25519→X25519 ya da RSA-OAEP) ───────────────────────────┼─► DEK ─► kasa
Windows kimlik deposu (önbellek) ──────────────────────────────────────────────┘
  • Kasa şifrelemesi: AES-256-GCM, rastgele nonce, tekrar engeli, AAD.
  • DEK nerede: İşletim sisteminin kimlik deposunda (keyring). Windows'ta Kimlik Bilgisi Yöneticisi'nde sealbox adıyla, macOS'ta Anahtar Zinciri'nde, Linux'ta Secret Service'te. Diskte yoktur.
  • Kilit açma sırası: Windows deposu → (ekip varsa) SSH anahtarı → hata ve kurtarma önerisi.
  • Anahtar yenilendiyse: Başka bir sahip anahtarı yenilediyse (dek_id uyuşmazsa) yenisi SSH ile alınır.

Repoya ne girer

DosyaRepoyaAçıklama
.sealbox/project.vaultgirerŞifreli kasa
.sealbox/project.namesgirerDeğişken adları ve kategoriler (değer yok). vault list kasayı açmadan bunu okur
.sealbox/project.maskedgirerAdı olmayan karalanmış kayıtların yer tutucuları
.sealbox/team.jsongirerÜyeler, roller, kişi başı kilitli DEK kopyaları
Yedekler, kilit dosyalarıgirmez.sealbox/.gitignore dışarıda bırakır
~/.sealbox/recovery/girmezKullanıcı klasöründe, proje dışında

Dikkat: Kök .gitignore tüm .sealbox/ klasörünü dışlıyorsa team komutları ve status uyarır. Kasa eklenmeden önce commit edilmiş sırlar git geçmişinde kalır, değiştirilmeleri gerekir.

Yapılandırma: sealbox.toml

sealbox.example.toml dosyasını proje köküne sealbox.toml olarak kopyalayın ya da --config ile verin. Bu dosyaya asla gerçek sır yazmayın.

sealbox.toml
max_file_bytes = 524288

# Varsayılan hariç tutmaları (.env, *.pem, .git/** ...) açıkça aşmak için:
explicit_includes = [".env.example"]

[scanner]
# İsimler regex ile güvenilir bulunamaz: karalanacak isimleri açıkça listeleyin.
person_names = []
# Yanlış pozitifleri bastırmak için tam değerler:
allow_values = []
disabled_rules = []

[[scanner.custom_rules]]
id = "proje-kodu"
category = "CUSTOM"
pattern = 'PRJ-\d{6}'
file_globs = ["*.py", "*.md"]
AlanVarsayılanAçıklama
excludes.env, *.pem, *.key, id_rsa*, .git/**, .venv/**, node_modules/**, build/**, .ssh/**…Hassas yollar. Taranmaz ve yazılmaz (.env ayrıca ele alınır)
explicit_includes[]Hariç tutmayı bilinçli olarak aşmak için
max_file_bytes512 KiBBundan büyük dosyalar atlanır
scanner.person_names[]Karalanacak isimler
scanner.custom_rulesKural ekleme (id, category, pattern, file_globs)
scanner.disabled_rules[]Kural kapatma
scanner.allow_values[]Yanlış pozitif bastırma (tam değer)

Eski sürümden kalan [provider], [policy], share_dirs, audit_log_file ve max_files_per_job ayarları yok sayılır.

VS Code eklentisi

Eklenti sealbox komutunun editördeki kumandasıdır. İşin hepsini komut yapar. Marketplace ya da Open VSX ya da:

$ code --install-extension sealbox-0.3.0.vsix

Ayarlar

AyarVarsayılanAçıklama
sealbox.executable""sealbox programının yolu. Boşsa önce projedeki .venv, sonra PATH aranır. Eski secureProxy.executable da okunur.
sealbox.checkOnSavetrueDosya açılınca ve kaydedilince açık sır var mı diye bak.

Özellikler

ÖzellikNe yapar
Açık sır uyarısıDosya açılınca ya da kaydedilince seal --check çalışır, sır olan yer sarı çizilir
Hızlı düzeltmeAmpul → "Bu dosyadaki sırları kasaya taşı"
Üzerine gelince__SECURE_..__, os.environ["X"], process.env.X, System.getenv("X") → "Değeri göster" (onaylı)
Çalışırken verKaralanmış verinin üzerinde ampul ya da hover → vault expose
Durum çubuğu🔒 3 sır kasada · 👥 2 kişi. Kurtarma yoksa ⚠ yedeksiz
Kasayla çalıştırKomutu terminalde sealbox exec ile başlatır (her seferinde onay)
Düz çalıştırma uyarısı▶ ile çalışan program kasadaki bir değişken için KeyError verirse "Kasayla çalıştır" önerilir
Ekip ve kurtarmaMenüden ekip kur, kişi ekle ya da çıkar. Kurtarma kodu, parçalar, kit, geri açma. Anahtar kayıpsa bu seçenekler kendiliğinden sunulur

Gösterilen değer yalnızca kapanan bir pencerede görünür. "Kopyala" denirse pano 30 saniye sonra temizlenir. Menü başlıkları VS Code'un diline göre Türkçe ya da İngilizcedir.

Neyi gösterir, neyi göstermez

Gösterir

Dosya yolu, kategori adları ve sayıları, satır/sütun, değişken adları, yer tutucu etiketleri, hata türü.

Asla göstermez

Gizli değerler (yalnızca onay penceresinde, istenirse), kasa anahtarı, kurtarma kodu ve parçaları (yalnızca pencerede), yabancı istisna mesajları (yalnızca tür adı).

Python logging kayıtları ayrıca sızıntı süzgecinden geçirilir.

Bilinen sınırlamalar

  • Regex her sırrı bulamaz. Sıra dışı biçimdeki parolalar; parçalanmış, birleştirilmiş, kodlanmış (\u0040, hex, ROT13) ya da doğal dil içindeki sırlar kaçırılabilir. Raporu inceleyin, gerekirse custom_rules ekleyin.
  • İsim tespiti güvenilir değildir. Yalnızca person_names listesi ve isteğe bağlı Detector eklentileri (ör. bir NER modeli) kullanılır.
  • Kısa değerler (1–2 karakter) güvenilir şekilde korunamaz.
  • Bellekten kesin silme garanti edilemez. Anahtar bytearray olarak tutulup iş sonunda sıfırlanır, ama Python kopya oluşturabilir. Swap ve crash dump'lar risk olarak kalır.
  • Tehdit modeli: Asıl hedef olan "ajan dosyayı okuyup buluta gönderir" senaryosunu kapatır. Kullanıcıyla aynı hesapta çalışan, kasıtlı olarak kötü niyetli bir program kimlik deposunu doğrudan okumaya uğraşırsa engel tam değildir.
  • Çıktı süzgeci ters çevrilmiş ya da parçalanmış yazdırmayı yakalamaz. Asıl koruma onay penceresidir.
  • Ekipten çıkarılan üye git geçmişindeki eski kasayı eski DEK ile açabilir. team remove bu değerleri listeler, onları servislerinden yenileyin.

Mimari

 dosya ──► SafeFS ──► Scanner ──► Sealer ──────────► dosya (os.environ["X"] / __SECURE_..__)
           yol/symlink  regex +      kasaya taşı /        │
           kontrolü     doğrulayıcı  karala               ▼
                                                 .sealbox/project.vault (AES-256-GCM)
                                                 anahtar: kimlik deposu / SSH / kurtarma kodu
 exec ──► onay penceresi ──► sırlar ortam değişkeni olarak ──► program (çıktısı süzülür)
sealbox/
├── __main__.py             CLI: komutlar, yardım metinleri ve örnekler
├── cli_help.py             Yardım altyapısı, "bunu mu demek istediniz"
├── i18n.py, i18n_en.py     Türkçe / İngilizce
├── status.py               init / status kontrol listesi
├── config.py               Pydantic yapılandırma + güvenli varsayılanlar
├── vaultstore.py           Proje kasası ve anahtarın açılması
├── runner.py               exec, vault reveal/set/expose/remove
├── team.py                 GitHub SSH ile ekip paylaşımı (team.json)
├── recovery.py             Kurtarma kodu, 2-of-3 parçalar, kit
├── approval.py             Onay ve gizli değer pencereleri
├── sealing/
│   ├── sealer.py           Kasaya taşıma / karalama planı
│   ├── rewriters.py        Literal → ortam değişkeni (Python, JS/TS, Java)
│   └── file_operations.py  SafeFS: yol güvenliği, kilit, atomik yazma
└── core/
    ├── scanner.py          Regex kuralları + Detector eklenti arayüzü
    ├── validators.py       TCKN, e-posta, telefon, Luhn, IBAN, entropi
    ├── tokenization.py     __SECURE_..__ yer tutucular
    ├── crypto.py           AES-256-GCM
    ├── envelope.py         DEK kilitleri: Argon2id, X25519, SSH
    ├── key_sharing.py      SLIP-39 Shamir parçalama
    └── leak_guard.py       Çıktı ve loglarda sır gizleme

Eski addan (secure-ai-proxy) geçiş

Hiçbir şey yapmana gerek yok:

  • Eski .secure_proxy/ kasa klasörleri ve ~/.secure_proxy/ kurtarma klasörü olduğu gibi çalışır. Yeni projeler .sealbox/ kullanır.
  • Kimlik Bilgileri Yöneticisi'ndeki eski secure-ai-proxy kaydı, kasa ilk açıldığında sealbox adına taşınır ve eskisi silinir.
  • secure_proxy.toml hâlâ okunur (sealbox.toml önceliklidir). secure-ai-proxy komutu da bir süre daha çalışır.

Geliştirme

$ pip install -e ".[dev]"
$ pytest -q
$ ruff check sealbox tests
$ mypy sealbox
$ cd vscode-extension && npm install && npm test

Yeni bir mesaj eklerken metni _("...") ile sarıp İngilizcesini sealbox/i18n_en.py'ye yazın. tests/test_i18n.py eksik çeviriyi yakalar. CI: Ubuntu + Windows, Python 3.12/3.13.