Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Kimlik ve erişim

Açıklama

İkinci doğrulama adımı ve gizli değer saklama

core/totp.py içindeki operatör konsolu ikinci doğrulama adımı ve core/secret_box.py ile core/crypto_at_rest.py'nin gizli değerleri, dosyaları ve yedekleri nasıl koruduğu.

Cluster ERP'nin src/cluster_erp/core/ içinde üç küçük kriptografi yardımcısı vardır. core/totp.py operatör konsolu için zamana dayalı tek kullanımlık parolaları hesaplar. core/secret_box.py geri okunması gereken küçük kontrol düzlemi gizli değerlerini, örneğin operatörlerin doğrulayıcı tohumlarını mühürler. core/crypto_at_rest.py saklanan dosyaları ve veritabanı dökümlerini şifreler. Bu sayfa her birinin neyi koruduğunu ve anahtarını hangi ayarın verdiğini anlatır. Anahtar değerlerini asla göstermez; değişken adları için ayarlar başvurusu sayfasına bakın.

Kısaca

  • İkinci adım altı haneli, 30 saniyelik adımlı standart bir zamana dayalı tek kullanımlık paroladır; her iki yönde bir adım toleransla doğrulanır (src/cluster_erp/core/totp.py:1-4, src/cluster_erp/core/totp.py:16-17, src/cluster_erp/core/totp.py:42-55).
  • Bu commit'teki kodda verify_totp yalnızca server/operators.py içindeki operatör girişinden çağrılır (src/cluster_erp/server/operators.py:129-168).
  • Operatör tohumları enc: önekiyle mühürlü saklanır; anahtar control_encryption_key ayarından, bu ayar boşsa secret_key ayarından gelir (src/cluster_erp/core/secret_box.py:1-9, src/cluster_erp/core/secret_box.py:33-37).
  • Dosyalar ve yedekler, 64 onaltılık karakterle verilen 256 bitlik bir anahtarla kimliği doğrulanmış şifreleme kullanır (src/cluster_erp/core/crypto_at_rest.py:1-16, src/cluster_erp/core/crypto_at_rest.py:34-40).
  • Çok kiracılı kipte ayar doğrulayıcısı storage_encryption_key, backup_encryption_key ve mail_encryption_key olmadan açılmayı reddeder (src/cluster_erp/config/settings.py:805-821).

Nasıl çalışır

Operatörün ikinci doğrulama adımı

generate_secret base32 biçiminde rastgele 160 bitlik bir tohum üretir (src/cluster_erp/core/totp.py:20-22). otpauth_uri bir doğrulayıcı uygulamanın okuduğu kayıt bağlantısını kurar (src/cluster_erp/core/totp.py:58-63). verify_totp yalnızca rakamları tutar, altı rakam ister ve geçerli adımla komşularına karşı sabit zamanlı karşılaştırma yapar (src/cluster_erp/core/totp.py:42-55).

Operatör hesabı akışı server/operators.py içindedir:

  • enroll_totp bir tohum verir veya değiştirir, mühürlü saklar, totp_enrolled_at damgasını basar ve tohumu ve bağlantıyı bir kez döndürür (src/cluster_erp/server/operators.py:178-195). python -m cluster_erp.server.operators totp-enroll komutu bunu çalıştırır (src/cluster_erp/server/operators.py:352-353).
  • authenticate önce parolayı, sonra kodu denetler. Yanlış kod hatalı deneme sayılır. vendor_require_totp açıkken tohumu olmayan bir operatör giriş yapamaz (src/cluster_erp/server/operators.py:114-175, src/cluster_erp/config/settings.py:131).
  • Mühürleme var olmadan önce saklanmış bir tohum, bir sonraki başarılı kullanımda mühürlenir (src/cluster_erp/server/operators.py:165-167).

Operatör girişinin tamamı operatör konsolu sayfasında anlatılır.

Mühürlü kontrol düzlemi gizli değerleri

secret_box, cryptography paketindeki Fernet'i kullanır. Fernet anahtarı yapılandırılan malzemenin SHA-256 özetidir (src/cluster_erp/core/secret_box.py:27-37). seal değeri enc: artı belirteç olarak döndürür; open_secret mühürlü veya eski mühürsüz bir kaydın düz değerini döndürür (src/cluster_erp/core/secret_box.py:40-61). Anahtar değişirse open_secret ValueError fırlatır (src/cluster_erp/core/secret_box.py:58-61). control_operators.totp_secret sütunu mühürlü biçim için yeterince geniştir (src/cluster_erp/core/tenancy.py:147-148).

Mail modülü sağlayıcı gizli değerlerini mail_encryption_key ile anahtarlanan ayrı bir yardımcıyla mühürler (src/cluster_erp/modules/mail/crypto.py:1-10). Bunu mail modülü sayfası anlatır.

Durağan dosyalar ve yedekler

crypto_at_rest iki kap tanımlar (src/cluster_erp/core/crypto_at_rest.py:1-16):

Kap Kullanım Anahtar ayarı Kaynak
Blob Bellekte, taze rastgele bir nonce ile şifrelenen tek bir saklı ek storage_encryption_key src/cluster_erp/core/crypto_at_rest.py:50-66, src/cluster_erp/core/storage.py:138-166
Akış Her boyutta bir veritabanı dökümü; parçalar atlanamaz, yinelenemez veya yeniden sıralanamaz backup_encryption_key src/cluster_erp/core/crypto_at_rest.py:70-140, src/cluster_erp/server/backup_tenants.py:241-320

EncryptedStorageBackend her depolama arka ucunu sarar ve depolama anahtarını ek veri olarak verir; böylece başka bir anahtara kopyalanan şifreli metin çözülmez (src/cluster_erp/core/storage.py:138-160). Anahtar var olmadan yazılmış dosyalar başlıklarının yokluğundan tanınır ve düz veri olarak okunur (src/cluster_erp/core/crypto_at_rest.py:14-15). parse_key 32 baytlık onaltılık olmayan her anahtarı reddeder (src/cluster_erp/core/crypto_at_rest.py:34-40); ayar doğrulayıcısı bunu açılışta uygular (src/cluster_erp/config/settings.py:822-827). Silme defteri de her satırı yedek anahtarıyla mühürler; bkz. gizlilik ve ilgili kişi başvuruları.

Neden böyle kurulmuştur

  • secret_box vardır, çünkü bir doğrulayıcı tohumu kodu doğrulamak için geri okunmalıdır; bu yüzden parola gibi özetlenemez (src/cluster_erp/core/secret_box.py:1-9).
  • crypto_at_rest, değiştirilmiş bir baytın yanlış veri üretmek yerine çözülememesi için kimliği doğrulanmış şifreleme kullanır ve anahtarı depodan değil ayarlardan alır (src/cluster_erp/core/crypto_at_rest.py:3-5).
  • parse_key kısa anahtarları reddeder, çünkü sessizce kabul edilen kısa bir anahtar anahtarsızlıktan daha zayıf olurdu (src/cluster_erp/core/crypto_at_rest.py:35-36).
  • Ayar doğrulayıcısı çok kiracılı kipte ayrı bir mail anahtarı ister: bir anahtar, bir amaç (src/cluster_erp/config/settings.py:815-821).

Kurallar ve sınırlar

  • Gizli değerler değişiklik geçmişinde görünmez: adında totp geçen sütunlar core/sensitive_fields.py kimlik bilgisi listesindedir (src/cluster_erp/core/sensitive_fields.py:36). Bkz. değişiklik geçmişi.
  • Kayıttan sonra control_encryption_key veya secret_key değiştirilirse mühürlü tohumlar okunamaz olur (src/cluster_erp/core/secret_box.py:58-61). totp-enroll ile yeniden kayıt yeni bir tohum verir (src/cluster_erp/server/operators.py:178-195).
  • Kontrol düzlemi saklama geçişi, son girişi control_actions_retention_years yıldan eski olan pasif bir operatör hesabını anonimleştirir ve parola özetini ve tohumunu siler (src/cluster_erp/server/control_retention.py:147-159).

Diğer parçalarla etkileşim

Sınırlar ve açık noktalar

  • Kiracı kullanıcılarının ikinci doğrulama adımı yoktur: src/cluster_erp üzerinde verify_totp ve totp araması yalnızca server/operators.py, core/tenancy.py, server/control_retention.py ve ayar yorumunda kullanım bulur (src/cluster_erp/config/settings.py:130-131).
  • storage_encryption_key için anahtar döndürme aracı, eski düz verinin re-encrypt aracıyla taşınabileceğini söyleyen modül notu dışında koddan belirlenemedi (src/cluster_erp/core/crypto_at_rest.py:14-15).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
time-based one-time password verify_totp Paylaşılan bir tohumdan ve geçerli 30 saniyelik adımdan türetilen altı haneli kod. zamana dayalı tek kullanımlık parola src/cluster_erp/core/totp.py:42
sealed secret secret_box.seal Küçük bir gizli değerin enc: önekiyle işaretlenmiş, geri çözülebilir şifreli biçimi. mühürlü gizli değer src/cluster_erp/core/secret_box.py:44
encryption at rest encrypt_blob Saklanan bir dosyanın veya dökümün diske ya da kovaya ulaşmadan önce kimliği doğrulanmış şifrelenmesi. durağan şifreleme src/cluster_erp/core/crypto_at_rest.py:50

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13