BCrypt dice que largas contraseñas similares son equivalentes: ¿problema conmigo, la gema o el campo de la criptografía?

He estado experimentando con BCrypt, y encontré lo siguiente. Si es importante, estoy ejecutando ruby 1.9.2dev (2010-04-30 trunk 27557) [i686-linux]

require 'bcrypt' # bcrypt-ruby gem, version 2.1.2

@long_string_1 = 'f287ed6548e91475d06688b481ae8612fa060b2d402fdde8f79b7d0181d6a27d8feede46b833ecd9633b10824259ebac13b077efb7c24563fce0000670834215'
@long_string_2 = 'f6ebeea9b99bcae4340670360674482773a12fd5ef5e94c7db0a42800813d2587063b70660294736fded10217d80ce7d3b27c568a1237e2ca1fecbf40be5eab8'

def salted(string)
  @long_string_1 + string + @long_string_2
end

encrypted_password = BCrypt::Password.create(salted('password'), :cost => 10)
puts encrypted_password #=> $2aLímite de longitud de clave de 8 bits en bcrypt.ckNMF/ku6VEAfLFEZKJ.ZC.zcMYUzvOQ6Dzi6ZX1UIVPUh5zr53yEu

password = BCrypt::Password.new(encrypted_password)

puts password.is_password?(salted('password')) #=> true
puts password.is_password?(salted('passward')) #=> true
puts password.is_password?(salted('75747373')) #=> true
puts password.is_password?(salted('passwor')) #=> false

Al principio pensé que una vez que las contraseñas llegaran a cierta longitud, las diferencias se perderían en todo el hashing, y solo si fueran muy diferentes (es decir, una longitud diferente) serían reconocidas como diferentes. Eso no me pareció muy plausible, por lo que sé de las funciones hash, pero no vi una mejor explicación.

Luego, intenté acortar cada una de las cadenas largas para ver dónde BCrypt podría comenzar a distinguirlas, y descubrí que si acortaba cada una de las cadenas largas a 100 caracteres, el intento final ('passwor') comenzaría volviendo cierto también. Entonces ahora no sé qué pensar.

¿Cuál es la explicación de esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta