Comprobando un ensamblado para un nombre fuerte

¿Es posible verificar si un ensamblado cargado dinámicamente se ha firmado con un nombre seguro específico?

¿Es suficiente / seguro comparar los valores devueltos porAssemblyName.GetPublicKey () ¿método?

Assembly loaded = Assembly.LoadFile(path);

byte[] evidenceKey = loaded.GetName().GetPublicKey();

if (evidenceKey != null)
{
    byte[] internalKey = Assembly.GetExecutingAssembly().GetName().GetPublicKey();

    if (evidenceKey.SequenceEqual(internalKey))
    {
        return extension;
    }
}

¿No puede esto ser falso? No estoy seguro de si el método SetPublicKey () tiene algún efecto en un ensamblado integrado, pero incluso la documentación de MSDN muestra cómo puede usar esto en un ensamblado generado dinámicamente (emisión de reflexión), lo que significaría que podría extraer la clave pública del host de la aplicación e inyectarlo en un ensamblaje propio y ejecutar código malicioso si lo anterior fue la protección, o me falta algo?

¿Existe un enfoque más correcto y seguro? Sé que si la situación invertida era el escenario, es decir, donde quería asegurar que el ensamblado solo fuera llamado por hosts firmados, podría etiquetar el ensamblado con el atributo StrongNameIdentityPermission.

Respuestas a la pregunta(3)

Su respuesta a la pregunta