4.1. Yeniden Deneme İstekleri ve Teslim Alındıları
Gönderen ya da alıcı cihazın durumu geri alındıysa veya alıcı cihazın durumu silindiyse, alıcı cihazın şifresini çözemediği geçerli bir mesaj alması mümkündür.
Bunu mesaj kaybı olmadan ele almak için gönderen cihaz; her şifreli mesaj için benzersiz bir MessageID ile dizinlenen bir MessageRecords kümesi saklayabilir. Tek bir mesaj birden çok alıcı cihaza şifrelenmişse, gönderen her alıcı cihaz için ayrı bir MessageRecord saklar; her biri benzersiz bir MessageID'ye sahiptir. Her MessageRecord şu değerleri saklar:
- Şifreli mesajın düz metni.
- Alıcı cihazın UserID'si.
- Mesajın şifrelendiği oturumun SessionID'si.
Alıcı cihaz, şifresi çözülemeyen bir mesaj aldığında; özgün gönderen cihazın posta kutusuna, şifresi çözülemeyen mesajın MessageID'sini içeren şifrelenmemiş bir yeniden deneme isteği (retry request) mesajı gönderir.
Özgün gönderen cihaz, yeniden deneme isteğini gönderen cihazın ilgili UserID ve DeviceID'siyle birlikte bir yeniden deneme isteği aldığında, aşağıdaki yeniden gönderme sürecini yürütür:
MessageID mevcut bir MessageRecord'a karşılık gelmiyorsa, yeniden deneme isteği atılır ve bu süreç sona erer.
İlgili MessageRecord; yeniden deneme isteğini göndermek için kullanılan UserID ile eşit bir UserID içermiyorsa, yeniden deneme isteği atılır ve bu süreç sona erer. (Not: DeviceID için benzer bir denetim yoktur; esneklik sağlamak amacıyla, yeniden deneme isteğinin özgün olarak gönderilenden farklı bir DeviceID'den gelmesine izin verilir.)
İlgili UserID ve DeviceID için etkin oturumlu, bayat olmayan bir UserRecord ve bayat olmayan bir DeviceRecord bulunmuyorsa; ya da böyle bir oturum bulunuyor ancak ilgili MessageRecord'taki SessionID ile eşleşiyorsa:
Yeniden gönderen cihaz, ilgili UserID ve DeviceID'ye karşılık gelen kimlik açık anahtarını sunucudan sorgular.
Sunucu alıcı UserID ya da DeviceID'nin bulunmadığını bildirirse; ilgili kayıtlar bayat olarak işaretlenir, yeniden deneme isteği atılır ve bu süreç sona erer.
Ardından gönderen, (UserID, DeviceID, açık anahtar) üçlüsüne şifreleme için hazırlık yapar.
DeviceRecord'un etkin oturumu, ilgili MessageRecord'taki SessionID ile eşleşiyorsa; gönderen cihaz, DeviceRecord için ilgili açık anahtarı kullanarak yeni bir başlatma oturumu kurar. Yeni oturum DeviceRecord'a eklenir. Bu; gönderen cihazın, hiçbir alıcı oturumla eşleşmeyen yetim bir oturum üzerinden bir mesajı tekrar tekrar göndermesini önler.
Yeniden gönderen cihaz, MessageRecord'taki düz metni ilgili DeviceRecord'un etkin oturumunu kullanarak şifreler.
Yeniden gönderen cihaz; alıcı posta kutusunu gösteren UserID ve DeviceID ile birlikte şifreli mesajı sunucuya gönderir.
Sunucu alıcı UserID ya da DeviceID'nin bulunmadığını bildirirse; ilgili kayıtlar bayat olarak işaretlenir, yeniden deneme isteği atılır ve bu süreç sona erer.
Aksi takdirde sunucu mesajı kabul eder ve mesaj ilgili posta kutusuna gönderilir. Yeniden gönderen cihaz eski MessageRecord'u siler ve yeni şifreli mesaj için yeni bir MessageRecord ekler.
MessageRecords; belirli bir süre geçtikten sonra ya da atıfta bulundukları düz metin kullanıcı tarafından gönderen cihazdan silindiğinde silinebilir. Cihazlar ayrıca başarılı mesaj çözümü üzerine teslim alındıları (delivery receipts) gönderebilir. Teslim alındıları bir MessageID'ye atıfta bulunur ve göndericiye ilgili MessageRecord'un silinebileceğini bildirir. Teslim alındıları şifreli ya da şifrelenmemiş olabilir (her alınan mesajın peşinden geldikleri için, onları şifrelemek pek bir şey kazandırmaz).
Aşırı yeniden göndermeden kaçınmak için cihazlar, bir mesajı yeniden göndermeye razı oldukları sayıya bir sınır koymalıdır. Başka herhangi bir hata oluşursa, yeniden gönderen cihaz durum değişikliklerini iptal eder ve süreci sona erdirir.
4.2. Oturum Sonlandırma
Güvenlik amacıyla cihazların eski oturumları zaman zaman yeni oturumlarla değiştirmesi arzu edilebilir. Bir yaklaşım, her oturuma bir zaman damgası vermektir. Zaman damgası; bir başlatma oturumu kurulduğunda geçerli zamana ayarlanır. Başlatma mesajları alındığında sunucu, alıcı cihaza mesajın posta kutusuna ulaştığı an ile geçerli zaman arasındaki farkı bildirir. Alıcı cihaz, başlatılan herhangi bir oturumun zaman damgasını geçerli zamandan bu farkı çıkararak ayarlar.
MAXSEND ve MAXRECV zaman sabitleri tanımlanır; burada MAXRECV, MAXSEND + 2(MAXLATENCY) değerinden büyük olmalıdır. Zaman damgasının üzerinden MAXSEND kadar süre geçtikten sonra bir oturum şifreleme için artık kullanılmamalı ve etkin durumdaysa etkin olmayan oturumlar listesinin başına alınmalıdır. Böyle bir oturumu etkinleştirme girişimleri etkisizdir. Zaman damgasının üzerinden MAXRECV kadar süre geçtikten sonra, önce tüm posta kutusu mesajları alınıp işlendikten sonra oturum silinebilir.