ერთჯერადი კოდები შეიძლება სრულიად სწორი იყოს თქვენს ტელეფონში და მაინც უარყოს სერვერმა იმავე წამში. ორივე მხარე ერთსა და იმავე ფუნქციას ითვლის საერთო საიდუმლოდან და მიმდინარე დროის საფეხურიდან, ამიტომ დროზე უთანხმოება კოდზე უთანხმოებას იწვევს. ეს საათის გადახრას უსაფრთხოებისთვის მნიშვნელოვან ხარვეზად აქცევს და არა უბრალო შეწუხებად.

აქ ორი საათია მნიშვნელოვანი, და ხილული საათის გასწორება ის ნაწილია, რასაც ადამიანები პირველად აკეთებენ. ის, რომელიც ჩვეულებრივ ყურადღებას მოითხოვს, მეორეა.

კოდი დროის ფუნქციაა, არა პაროლი

TOTP იღებს საერთო საიდუმლოს და მიმდინარე დროიდან მიღებულ მთვლელს, ორივეს გაატარებს გასაღებიან ჰეშში და შედეგს ჭრის მოკლე ათობით სტრიქონამდე, როგორც განსაზღვრულია RFC 6238-ში. მთვლელი ყოველ დროის საფეხურზე წინ მიიწევს, ჩვეულებრივ ოცდაათი წამი, ამიტომ იგივე საიდუმლო ახალ მნიშვნელობას ქმნის, როცა საფეხური იცვლება. გამშვები ხელახლა ითვლის მიმდინარე საფეხურის მოსალოდნელ მნიშვნელობას და ადარებს, რაც მოითხოვს იმავე საიდუმლოს და აწმყოს იმავე წარმოდგენას. პაროლი ხელახლა გამოსაყენებელი რჩება, სანამ არ შეიცვლება, მაშინ როცა ეს მნიშვნელობა იწურება იმ ზღვარზე, რომელსაც კლიენტი ვერ ხედავს.

ამიტომ ერთი კოდი მუშაობს და შემდეგი რამდენიმე წამში ფუჭდება. ეს ასევე ხსნის, თუ რატომ არის ჩატის შეტყობინებიდან კოდის კოპირება ასეთი არასაიმედო ჩვევა.

ორი საათი უნდა შეთანხმდეს, არა ერთი

რეგისტრაციის მასალა პირველი საერთო რამ არის, დრო კი მეორე. თუ საიდუმლო სწორია, მაშინ როცა საათები დასაშვებ ფანჯარაზე მეტად განსხვავდება, ყოველი გენერირებული მნიშვნელობა არასწორ საფეხურზე ხვდება და უარყოფილია. თუ საათები ემთხვევა, მაშინ როცა საიდუმლო არასწორია, ყოველი მნიშვნელობაც უარყოფილია, და ორივე წარუმატებლობა შესვლის ეკრანიდან ერთნაირად გამოიყურება. მათი გამიჯვნა ნიშნავს ანგარიშის ჩანაწერისა და დროის დამოუკიდებლად შემოწმებას, სწორედ ამ თანმიმდევრობით.

გამშვების საათი იმავე ყურადღებას იმსახურებს, რასაც მოწყობილობისა. სერვერი, რომლის დროის წყაროც გატეხილია, ყველა მომხმარებლის სწორ კოდს ერთდროულად უარყოფს, და მოხსენებები მოულოდნელ გაფუჭებას აღწერს და არა გადახრას. ამ ნიმუშის ამოცნობა ღირს, რადგან მისი შესწორება სერვერს ეკუთვნის და არა ას ტელეფონს.

რა ჯდება ფანჯრის გაფართოება

იმპლემენტაციებმა შეიძლება მიიღონ კოდი მეზობელი საფეხურიდან მცირე სხვაობების შთანთქმისთვის, და ეს ტოლერანტობა დიზაინის გადაწყვეტილებაა და არა უფასო კორექტირება. ყოველი დამატებითი საფეხური ამრავლებს ნებისმიერ მომენტში მოქმედი მნიშვნელობების რაოდენობას, რაც ზუსტად ის არის, რასაც მიხვედრითი თავდამსხმელი ამჯობინებს. გამეორების წესი იმავე მიზეზით მნიშვნელოვანია, რადგან ორჯერ მიღებული კოდი სასარგებლოდ გაჟონილი კოდია. ადმინისტრატორი, რომელიც ფანჯარას აფართოებს საჩივრების ჩასახშობად, რეალურ თვისებას კოსმეტიკურ გაუმჯობესებაზე ცვლის.

საათის გასწორება შეკეთებაა, ფანჯრის გაფართოება კი დამამშვიდებელი. პირველი აცილებს მიზეზს, მეორე მალავს მას.

შეამოწმეთ ორივე საათი ხელახლა ცდამდე

წაიკითხეთ დრო მოწყობილობაზე და სერვერზე, და შეადარეთ გადახრები და არა ნაჩვენები ადგილობრივი დროები. ქვემოთ მოცემული ბრძანებები აჩვენებს სინქრონიზაციის მდგომარეობას და ნედლ UTC მომენტს Linux ჰოსტზე ან სერვერზე. გაუშვით ისინი ორივე ბოლოში, სანამ რომელიმე ავთენტიფიკაციის პარამეტრს შეცვლით.

timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status

წამებში გაზომილი გადახრა უვნებელია, წუთებში გაზომილი უარყოფას ხსნის, და სისტემა, რომელიც სინქრონიზაციის არცერთ წყაროს არ იტყობინება, ორივეს კანდიდატია. შეადარეთ ორი UTC დროის ნიშანი პირდაპირ, რადგან ადგილობრივი დრო მოიცავს დროის სარტყელს, რომელსაც ალგორითმი არასოდეს ხედავს. თუ გადახრები მცირეა და კოდები მაინც ფუჭდება, შეწყვიტეთ საათების რეგულირება და ნაცვლად ამისა შეამოწმეთ რეგისტრაციის ჩანაწერი. ჩაკეტილი ანგარიშის წინააღმდეგ განმეორებითი ცდები საწყის ხარვეზზე დაკვირვებას ართულებს.

ჩაიწერეთ უარყოფის დრო, გადახრა და შეცდომის ტექსტი, და საერთო საიდუმლო ამის გარეთ დატოვეთ. მხარდაჭერა პირველი სამით იმუშავებს და მეოთხე მას არასოდეს უნდა დაენახოს.

დაკავშირებული სტატიები