Tienes varias opciones para códigos como este. Supongo que su idea es utilizar el código como inicio de sesión principal del usuario, y no habría una contraseña por separado. Tiene varias partes de la pregunta, comenzaré con "¿es seguro?"
Respuesta corta, probablemente no sea suficiente. Y no es solo por el contexto de la invitación solamente y por ningún motivo. Siempre hay un motivo, incluso si es solo "para el lulz". El hecho de que el sitio no esté indexado y sea solo de invitación, no significa que algunos blackhat no lo encuentren y quieran jugar. Es posible que no sepan que no tiene información potencialmente valiosa más allá del inicio de sesión. ¿Qué tan grave será si alguien obtiene una copia de su base de datos? ¿Qué tanto problema si alguien roba el código?
5 caracteres pueden ser suficientes para un código de invitación, pero como inicio de sesión es irrazonablemente corto, incluso si hay un número muy bajo de usuarios. Con el tamaño de su código, tiene entre 30 y 60 millones de combinaciones dependiendo del algoritmo de generación y si está limitando los caracteres para evitar confusiones "O vs 0". El código siempre se puede dividir en secciones para que sea más fácil de escribir, digamos A1C-B2X-YP3. 9 caracteres serán al menos un trillón de combinaciones.
En términos de generación de códigos, uno es más corto pero de apariencia aleatoria, el otro es más largo y natural. Elegir un código de lenguaje natural significa que el usuario tiene que escribir más información, y también puede limitar la cantidad de combinaciones si se les ordena que parezcan naturales como una oración. ¿Cómo lidiar con un error tipográfico? ¿Qué pasa si un error tipográfico genera un inicio de sesión válido? Llamar a la opción del lenguaje natural una "frase de contraseña" puede mejorar las cosas para el usuario, ya que la percepción de lo que es puede influir en la capacidad de recordarla y no sentirse intimidada por ella. El otro problema con un código de lenguaje natural es que a un usuario no le gusten algunas de las palabras, o su combinación, puede resultar ofensivo, desagradable o tener mala memoria. A algunas personas realmente no les gusta la palabra "húmedo", por ejemplo.
Como usuario, preferiría un código más codicioso. Podría haber una verificación del dígito de verificación del lado del cliente antes de que el código se use para iniciar sesión. Limitar la cantidad de intentos de inicio de sesión funciona mucho mejor si alguien no puede ingresar un código obviamente inválido. Utilizo un algoritmo para generar códigos como el de una permutación pseudoaleatoria llamada Molibdeno, básicamente un cifrado de bloque personalizado que se asemeja a HIGHT . Internamente es 5 valores de 8 bits, externamente es 8 valores de 5 bits, codificados en 32 caracteres alfanuméricos, con "OIZS" omitido para no confundirse con "0125". Agregue un solo dígito de verificación al final, y son 9 dígitos, lo que se ve bien dividido en 3 grupos de 3. Veo rutinariamente códigos mucho más largos en los correos. Los nuevos códigos se generan al cifrar un contador incremental, por lo que se garantiza que no se repetirán. La generación de códigos al azar requiere una comprobación de todos los códigos en uso para asegurarse de que no haya una colisión. Usar una permutación para generar códigos significa que el acceso debe ser limitado.
También podría forzar un tipo específico de secuencia como un código postal canadiense, que es alternar letras y números. NLN-LNL-NL (N) como 5A9-F4E-0L0 lo limitaría a 4.6 billones de códigos, pero podría ser más fácil de recordar y más fácil de identificar cuando alguien tiene un problema. Asumiría que los usuarios no intentarán recordar, sino que lo mantendrán escrito en algún lugar.
Si un código se usa como una invitación, los códigos cortos están bien, siempre y cuando estén limitados y sean de un solo uso. Supongo que los usuarios no tendrán contraseñas, y solo su ID de usuario. En ese caso, podría considerar un código de invitación como una adición al ID de usuario, que solo se utiliza cuando alguien tiene que llamar para solicitar asistencia como autenticador adicional. De esta manera, utilizarían el código de invitación para obtener su código de usuario cuando se registran, luego el código de invitación se desactiva, pero se almacena con la cuenta. Solo se enviará el código de invitación.
Si no es víctima de un ataque dirigido contra su sistema y sigue las mejores prácticas para proteger el sitio y la base de datos, probablemente estará bien. Hay muchas formas de almacenar y procesar los datos de inicio de sesión, que probablemente están fuera del alcance de su pregunta, que pueden afectar la seguridad del sistema. Auditar la generación y búsqueda de códigos por parte del personal de soporte es una buena idea. He hecho algunas suposiciones aquí debido a la información limitada con respecto a la base de usuarios y al sitio, espero que esta respuesta aún sea relevante.