Atributo nos membros da interface não funciona

Na minha aplicação vários modelos precisamPassword propriedades (por exemplo,Registration eChangePassword modelos). oPassword propriedade tem atributo comoDataType eRequired. Portanto, para garantir a reutilização de uma consistência, criei:

interface IPasswordContainer{
    [Required(ErrorMessage = "Please specify your password")]
    [DataType(DataType.Password)]
    string Password { get; set; }
} 

E

class RegistrationModel : IPasswordContainer {
    public string Password { get; set; }
}

Infelizmente, os atributos não funcionam.

Então eu tentei mudar a interface para uma classe:

public class PasswordContainer {
    [Required(ErrorMessage = "Please specify your password")]
    [DataType(DataType.Password)]
    public virtual string Password { get; set; }
}

E

public class RegistrationModel : PasswordContainer {
    public override string Password { get; set; }
}

Agora está funcionando. Por que isso é assim?

Por que os atributos estão funcionando quando herdados da classe, mas não estão funcionando quando herdados da interface?