Skip to main content

V2.7.6 Out of Band Verifier

Requirement:#

Verify that the initial authentication code is generated by a secure random number generator, containing at least 20 bits of entropy (typically a six digital random number is sufficient).

Explanation:#

Энтропия Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл относится ΠΊ стСпСни случайности ΠΈΠ»ΠΈ нСпрСдсказуСмости сгСнСрированных чисСл. БСзопасный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ числа Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ случайны ΠΈ ΠΈΡ… нСльзя Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Π’ случаС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ минимальной энтропии Π² 20 Π±ΠΈΡ‚ считаСтся достаточной. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 2 ^ 20 (ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ затрудняСт ΡƒΠ³Π°Π΄Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… срСдств. ШСстизначного случайного числа ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно для исходного ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 10 ^ 6 (ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½) Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ являСтся случайным ΠΈ обСспСчиваСт высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ энтропии.

Remediation:#

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с Π½ΠΈΠ·ΠΊΠΎΠΉ энтропиСй Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ бСзопасности ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ систСмы. Π’ΠΎΡ‚ нСсколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… срСдств Π·Π°Ρ‰ΠΈΡ‚Ρ‹:

  • Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ количСство Ρ†ΠΈΡ„Ρ€: ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства Ρ†ΠΈΡ„Ρ€ Π² ΠΊΠΎΠ΄Π΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ ΠΈ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΡƒ ΡƒΠ³Π°Π΄Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. НапримСр, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΡˆΠ΅ΡΡ‚ΠΈΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊ Π²ΠΎΡΡŒΠΌΠΈΠ·Π½Π°Ρ‡Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ с 20 Π΄ΠΎ 24 Π±ΠΈΡ‚.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл с Π±ΠΎΠ»Π΅Π΅ высокой энтропиСй: Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π½Π΅ считаСтся бСзопасным, для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл с Π±ΠΎΠ»Π΅Π΅ высокой энтропиСй. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ сдСлаСт Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ бСзопасным. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€ бСзопасности.
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€ бСзопасности, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ двухфакторная аутСнтификация (2FA), использованиС бСзопасных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² связи (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SSL/TLS) ΠΈ бСзопасноС Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ риски, связанныС с ΠΊΠΎΠ΄ΠΎΠΌ с Π½ΠΈΠ·ΠΊΠΎΠΉ энтропиСй.Β 

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шагов исправлСния Π² Python:

import random
import string
def generate_authentication_code():
# Generate a six-digit random number
digits = "".join(random.choices(string.digits, k=6))
return digits
# Generate a new authentication code
code = generate_authentication_code()
print("Authentication code:", code)

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ дСмонстрируСт, ΠΊΠ°ΠΊ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚ΠΈΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ случайноС число с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля random Π² Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт бСзопасный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл.

Additional:#