auth tag by time fixes

This commit is contained in:
2026-03-08 19:00:03 +07:00
parent 2069f1a62c
commit 6ca47336a1
3 changed files with 53 additions and 18 deletions
+15 -12
View File
@@ -203,20 +203,23 @@ impl SessionKeys {
let current_step = now / 60;
// 1. Проверяем текущую минуту (самый вероятный случай)
if &Self::compute_tag(&self.auth_key, current_step) == received_tag {
return true;
// Вставляем цикл проверки расширенного окна [-2, +2]
// Это дает запас по времени в обе стороны
for step in (current_step.saturating_sub(2))..=(current_step.saturating_add(2)) {
if &Self::compute_tag(&self.auth_key, step) == received_tag {
// Если подошел не текущий, а другой шаг — логируем это для диагностики
if step != current_step {
tracing::debug!(expected = %current_step, matched = %step, "Auth tag valid with time offset");
}
return true;
}
}
// 2. Проверяем предыдущую минуту (на случай стыка минут или задержки сети)
if &Self::compute_tag(&self.auth_key, current_step - 1) == received_tag {
tracing::debug!("Auth tag valid (matched previous minute window)");
return true;
}
// Если ни один не подошел — тег невалиден
// Если ни один не подошел — логируем для отладки
tracing::warn!(
current_step = %current_step,
"AUTH MISMATCH: All tags rejected for current window"
);
false
}
// Вспомогательная функция для генерации конкретного тега
}