ASELSANMicrokernel
ZAMAN GÜVENLİĞİ · RTC

Saat

Bu sayfa iki soruyu ayırır: 'ne kadar süre kaldı' ve 'saat kaç'. Birincisi saldırganın oynatamayacağı monotonik bir sayaçtan, ikincisi oynatılabilen bir takvimden gelir. Cihaza 16 Eylül 2026'da yedek pil takıldı, yani Pi 5'in gerçek saati artık kesintiden sağ çıkabilir; bu sayfa o saatin nasıl okunacağını, ne kadar güvenileceğini ve bugün nerede durduğumuzu anlatır.

Yanlış saat, sessizce yanlış olandır. Süresi geçmiş bir sertifikayı yeniden geçerli yapar, iptal edilmiş bir capability'nin son kullanmasını ileri taşır, silinmiş bir denetim satırını makul gösterir ve replay penceresini yeniden açar. Bu yüzden buradaki saat işi bir arayüz işi değil, bir güvenlik işidir.

Sayfadaki hiçbir satır "donanımda çalışıyor" demez. RTC sürücüsü yazıldı ve izole olarak derlendi; üretim boot'unda çağrısı yoktur ve bu karttan okunmuş bir epoch içeren hiçbir UART yakalaması yoktur. Kaynak kanıtı ile fiziksel kanıt ayrı şeylerdir ve burada ayrı yazılırlar.

Bugün cihazda olan zaman kaynakları

Üç kaynak var, biri hariç hepsi duvar saati. Hiçbiri tek başına güvenlik kararı verecek durumda değil; bu yüzden üstlerine bir güven merdiveni konuyor.

Monotonik sayaç

ARM Generic Timer — CNTVCT

Çalışıyor

Açılıştan bu yana geçen tick sayısı. Takvim değeri taşımaz, bu yüzden geriye itilemez: ağdan, kullanıcıdan ya da RTC'den etkilenmez.

Kanıt
Üretim board-rpi5 imajının boot yolu CNTVCT'yi okur; frame/tick ölçümleri bu sayaçla alınmıştır.
Dürüst sınır
CNTP hiç kullanılmıyor ve CPU1'in timer'ı 40 tick sonra kalıcı kapatılıyor; çok çekirdekli bir deadline mimarisi bu sayaca tek başına dayanamaz.
  • kernel/src/arch/aarch64/timer.rs
  • kernel/src/ui/browser_metrics.rs
Duvar saati

Taşınan epoch blob'u (ASLNEPO1)

Çalışıyor

Flash anında host'ta üretilen 32 baytlık blob: Unix epoch + UTC offset + CRC-32. config.txt initramfs ile firmware'e verilir, /chosen/linux,initrd-start üzerinden okunur ve CNTVCT ile ilerletilir.

Kanıt
Boot makbuzu kaynağı ve senkron durumunu yazar (SRC=... SYNCED=0/1); blob yoksa saat sıfırdan sayar ve durum çubuğu 00:00 gösterir.
Dürüst sınır
Bu bir saat değil, dondurulmuş bir andır: cihaz her açılışta host'un ona verdiği zamanı devralır. Kendi başına zaman tutamaz ve ağ yokken kimse onu düzeltemez.
  • kernel/src/wallclock.rs
  • scripts/render-rpi5-epoch-blob.sh
  • kernel/src/main.rs:1795
Duvar saati

DA9091 PMIC RTC (yedek pilli)

Yazıldı · çağrılmıyor

Pi 5'in gerçek saati. PMIC üzerindedir ve CPU'nun adresleyebildiği bir I²C/SPI register arayüzü yoktur: tek yol VideoCore firmware mailbox'ıdır. Sürücü yazıldı; üretim boot'unda çağrısı yok.

Kanıt
Kaynak düzeyi: sürücü iki feature konfigürasyonunda da derleniyor ve 6 kaynak testi geçiyor. Fiziksel kanıt YOK — hiçbir UART yakalamasında bu karttan okunmuş bir epoch yoktur.
Dürüst sınır
J5'e CR2032 2026-09-16'da takıldı; pilin gerçekten kesinti boyunca zamanı tuttuğu bu kartta ÖLÇÜLMEDİ. Beklenen davranış üretici belgesine dayanır, bizim ölçümümüze değil.
  • kernel/src/driver/rpi5_rtc.rs
  • abi/src/time_security.rs
  • simulation/tests/rpi5_rtc_source.rs
Duvar saati

Ağdan saat (NTP/SNTP)

Yok

Depoda ağdan zaman alan hiçbir kod yok. Dikkat: kernel/src/ui/browser_ntp.rs dosyasının adı yanıltmasın — NTP orada 'new tab page', yani tarayıcının yeni sekme sayfasıdır, ağ zaman protokolü değil.

Kanıt
Yok.
Dürüst sınır
Ağ saati olmadan cihazın zamanı yalnızca flash anındaki andan ve (çağrıldığında) RTC'den gelir. Ağ saati eklendiğinde de güvenilmez bir girdi olacaktır: uzaktan gelen saat, imzalanmadıkça bir iddiadır.
  • kernel/src/ui/browser_ntp.rs
Duvar saati

EL0'un saati okuma yolu

Yok

ABI'de saat/duvar-zamanı syscall'ı yoktur. Durum çubuğunun saatini çekirdek kendisi çizer; kullanıcı uzayındaki hiçbir program saati okuyamaz.

Kanıt
syscall listesi yalnız IPC, bellek ve bildirim çağrılarını içerir; zamanla ilgili tek girdiler IPC_CALL_TIMEOUT, IPC_RECV_TIMEOUT ve NOTIFICATION_WAIT_TIMEOUT'tur ve üçü de tick cinsindendir.
Dürüst sınır
Saat güvenini EL0'a bildiren bir arayüz olmadığı için 'bu saat güvenilir mi' sorusunu şu an yalnız çekirdek sorabiliyor.
  • abi/src/lib.rs
  • kernel/src/main.rs:1234

Firmware arayüzü ve çakılı sayılar

Pi 5'te RTC'ye CPU'nun adresleyebildiği bir I²C/SPI register arayüzünden ulaşılmaz; tek yol VideoCore firmware mailbox'ıdır. Tag numaraları ve seçici sırası bir ABI'dir ve kaynak testiyle Linux'ta ölçülmüş değerlere bağlanmıştır.

KalemDeğerAnlamı
GET tag0x00030087RTC register okuma. Firmware property kanalı.
SET tag0x00038087RTC register yazma — okuma tag'inin 15. biti set edilmiş hali. Cevap kelimesinin 31. bitiyle karıştırılmamalı.
Değer tamponu8 baytBir seçici kelimesi + bir veri kelimesi.
Seçici 0 · TIMEUnix saniye, UTCOkuma yolunun kullandığı tek seçici.
Seçici 7 · BBAT_VOLTSmikrovoltYedek pilin ölçülen voltajı — kartın kendi pilini görebildiği tek yol.
Makul pencere2020-01-01 → 2100-01-01Taşınan blob ile AYNI pencere; RTC yolu ondan gevşek olamaz. Bir kaynak testi iki pencereyi birbirine bağlar.
Corroboration toleransı5 saniyeRTC ile çıpalı saat arasındaki kabul edilen fark. Bir mailbox gidiş-dönüşünden geniş, süresi geçmiş bir sertifikayı geçirecek kaymadan çok dar.
Hücre eşikleri0,1 V · 2,4 V · 2,9 VYok / zayıf / nominal / dolu sınırları. Bunlar SEÇİLMİŞ mühendislik değerleridir; bu kartta ölçülmüş bir deşarj eğrisi değil.

Güven merdiveni

Dört seviye. Sıralama sözleşmenin parçasıdır ve bir test onu doğrular: kod seviyeleri karşılaştırır, karşılaştırılan şey de kastedilen şey olur.

  1. 0

    None

    Hiçbir kaynak yok.

    Nasıl çıkılır: Blob okunamadı ve RTC okunamadı; ya da yedek hücre zamanı tutamayacak durumda.

    Ne karar verilebilir: Saat senkronsuz sunulur ve sıfırdan sayılır. Uydurulmuş bir zaman gösterilmez.

  2. 1

    CarriedAtFlash

    Flash anında taşınan an, CNTVCT ile ilerletilmiş.

    Nasıl çıkılır: ASLNEPO1 blob'u CRC'siyle doğrulandı ve kabul edildi.

    Ne karar verilebilir: İnsan için yeterli, güvenlik kararı için değil: bu saat yalnızca ileri gider, ama hiçbir şey onu doğrulamadı.

  3. 2

    RtcUncorroborated

    Pilli RTC'den okundu, henüz bir çapayla karşılaştırılmadı.

    Nasıl çıkılır: Firmware mailbox'ından geçerli bir epoch döndü ve hücre Nominal/Full.

    Ne karar verilebilir: Kanıt, yetki değil. Takvim güvenlik kararı buna dayanamaz.

  4. 3

    RtcCorroborated

    RTC okuması, monotonik sayaçla çıpalanmış saatle uyuştu.

    Nasıl çıkılır: İki okuma arasındaki fark 5 saniyeyi aşmadı ve hücre zamanı tutabilecek durumda.

    Ne karar verilebilir: Takvim zamanına dayanan güvenlik kararı yalnızca bu seviyede verilebilir. Altındaki her seviyede karar fail-closed'dır: sertifika reddedilir, kira reddedilir, replay penceresi hesaplanmaz.

Kurallar ve bugünkü durumları

Kurallar abi/src/time_security.rs içinde saf fonksiyonlar olarak durur — yorumda değil, çağrılabilir kodda. Aşağıdaki "bugün" sütunu, kuralın yazılmış olmasıyla üretimde bağlanmış olmasının aynı şey olmadığını gösterir.

R1 İki saat, asla tek saat.

Kısmi

Deadline, uyku, IPC zaman aşımı, yeniden deneme bütçesi ve capability son kullanması monotonik sayacı okur; duvar saati yalnız insan için olan damgaları ve takvim kararlarını okur. Saldırganın ileri geri oynatabildiği bir saat, 'ne kadar süre kaldı' sorusunun girdisi olamaz.

Bugün: Kural `wall_clock_may_measure_elapsed()` olarak yazıldı ve test edildi; ancak tüm çağrı yerlerinin denetimi (audit) henüz yapılmadı.

abi/src/time_security.rs

R2 Duvar saati yalnız ileri gider ve geri gitmesi görünür bir olaydır.

Kısmi

Geri alınan saat, süresi geçmiş bir sertifikayı yeniden geçerli yapar, iptal edilmiş bir capability'nin son kullanmasını ileri taşır, silinmiş bir denetim satırını makul gösterir ve replay penceresini yeniden açar. Taban yanlış saati engellemez; sessizce yanlış olmasını engeller.

Bugün: Taban ve geri alma tespiti yazıldı ve host'ta 13 testle koşuldu; üretim imajında henüz bir çağrı yeri ve rapor bağlantısı yok.

abi/src/time_security.rs · kernel/src/driver/rpi5_rtc.rs

R3 Güven kazanılır ve tavanı pildir.

Yazıldı · çağrılmıyor

Tek bir okumanın bizimle uyuşması, PMIC'in çalıştığını kanıtlar; saymaya devam ettiğini kanıtlamaz. Kesinti boyunca zamanı tutamayan bir hücre, okuma ne kadar düzgün olursa olsun saati yükseltemez.

Bugün: `resolve_trust` ve hücre sınıflandırması yazıldı; hücre voltajı okuması firmware seçici 7'ye bağlı ve o çağrı henüz yapılmıyor.

abi/src/time_security.rs

R4 Takvim güvenlik kararı fail-closed'dır.

Yazıldı · çağrılmıyor

İyi bir saatte fail-closed olmak bir hata mesajına mal olur; kötü bir saatte devam etmek, o saatin koruduğu özelliğe mal olur.

Bugün: `calendar_security_decision_allowed()` yazıldı ve merdivenin altındaki her seviye için false döndüğü test edildi; kararı verecek bir takvim tüketicisi (sertifika/kira) henüz yok.

abi/src/time_security.rs

R5 Saati yalnız yetkili bir kapı değiştirebilir.

Planlandı

Saati yazabilen herkes, tüm saat tabanlı kararları yazabilir. Bu yüzden yazma yolu bir capability ister.

Bugün: `RtcWriteGrant` token'ının alanı özel ve kurucusu yok: bu imaj saati yazma KABİLİYETİ olmayan bir imajdır. Yetkiyi veren zaman-otoritesi kapısı henüz yazılmadı.

kernel/src/driver/rpi5_rtc.rs

Saatle ilgili siber güvenlik işlemleri

Sekiz iş. İkisi bu turda yazıldı ve koşuldu, biri yazıldı ama çağrılmıyor, beşi sırada. Her satırda yapılanın kanıtı ve sıradaki adım ayrı ayrı yazılıdır.

#İşDurumKanıtSıradaki adım
Z1RTC firmware taşıması ve seçici ABI'siYazıldıkernel/src/driver/rpi5_rtc.rs iki feature konfigürasyonunda da derleniyor; seçici numaralandırması Linux'ta ölçülmüş ABI'ye karşı test ediliyor.Çağrı yeri (RTCPROBE makbuzu) ve UART kanıtı.
Z2Saat karar kuralları (monotonik/duvar, taban, merdiven)Yazıldıabi/src/time_security.rs içinde saf fonksiyonlar; cargo test -p aselsan_abi ile 13 yeni test geçiyor.Kuralların üretim çağrı yerlerine bağlanması.
Z3Saat yazma yetkisi (zaman-otoritesi kapısı)PlanlandıYazma yolu `RtcWriteGrant` istiyor ve token'ın kurucusu yok; kaynak testi bunu doğruluyor.Capability denetimini yapan tek bir `pub(crate)` verici ve onu sınayan test.
Z4Monotonik/duvar çağrı yeri denetimiPlanlandıYok — kural yazıldı, denetim yapılmadı.Zaman aşımı ve yeniden deneme bütçesi okuyan her satırın listelenmesi ve duvar saati okuyan varsa kapatılması.
Z5Geri alma olayının rapora bağlanmasıPlanlandı`last_step_was_rollback()` var; onu okuyan kimse yok.Geri alma denemesinin boot makbuzuna ve denetim kaydına yazılması; güvenin düşürülmesi.
Z6Denetim kaydı ve zaman damgasıYokYok — denetim kaydı (audit log) altyapısı henüz yok.Her damganın yanına monotonik bir çıpa koymak: duvar saati geri alınsa bile kayıt sırasının bozulmaması.
Z7Ağ saati (SNTP) ve güven sınırıYokYok — depoda ağdan saat alan kod yok.Önce karar: saat RTC'den mi, ağdan mı, ikisinden mi kurulacak? Ağ saati imzalanmadıkça bir iddiadır ve tek başına merdiveni yükseltemez.
Z8Pil sağlığının saate bağlanmasıPlanlandı`backup_cell()` eşikleri ve güven tavanı yazıldı; voltaj okuması çağrılmıyor.Firmware seçici 7'den voltaj okumak ve düşük pilde saat güvenini fail-closed düşürmek.

Bu turda koşulan kanıtlar

Üç ayrı şey kanıtlandı ve üçü de farklı güçtedir: kuralların davranışı gerçekten koşuldu, sürücünün kaynak sözleşmesi doğrulandı, sürücü tip denetiminden geçti. Hiçbiri fiziksel koşu değildir.

cargo test -p aselsan_abi

15 test geçti (13'ü bu turda eklendi)

Kuralların kendisi: pencere sınırları, geri alma, merdiven, tolerans, fail-closed, hücre eşikleri. Fonksiyonlar çağrılarak koşulur, kaynak metni okunarak değil.

cargo test -p aselsan_microkernel_simulation --test rpi5_rtc_source

6 test geçti

Sürücünün kaynak sözleşmesi: tag'ler, seçici sırası, üretim boot'unda çağrı olmaması, yazma yolunun ulaşılamazlığı, iki pencerenin aynılığı.

rustc --crate-type lib (sarmalayıcı)

Temiz derleme, iki feature konfigürasyonunda

kernel/src/driver/rpi5_rtc.rs tip denetimi. Fiziksel ya da tam kernel derlemesi DEĞİL: cargo bu ortamda bağımlılıkları indiremediği için izole tip denetimi yapıldı.

Bu turda koşan ortamda cargo kayıt defteri salt-okunur olduğu için simulation crate'i cargo ile derlenemedi; rpi5_rtc_source testi rustc --edition 2021 --test ile derlenip koşuldu ve 6/6 geçti. Kanonik komut yukarıdaki cargo komutudur ve bağımlılıkları erişilebilen bir ortamda aynı sonucu vermelidir. Kernelin tam derlemesi (cargo build --features board-rpi5) bu turda KOŞULMADI.

Sıradaki adım

Sıradaki tek adım: RTCPROBE makbuzu. Çağrı yeri rpi5-rtc-read bayrağının arkasına girer, salt-okunur iki mailbox alışverişi yapar ve UART'a ne bulduğunu yazar. O makbuz gelmeden bu sayfadaki hiçbir satır 'donanımda çalışıyor' sayılmaz.

İlgili sayfalar