BES imza, en basit imza türüdür. BES, imza sadece o kişinin imzayı attığını garanti eder. İmza zamanıda belli olmadığından ancak sertifika geçerli iken imza doğrulanabilir. Sertifika iptal edildiğinde veya sertifika süresi dolduğunda imza doğrulanamaz. BES imza içersine zaman bilgisi eklenebilir, eklenen zamanın herhangi bir hukuki yükümlülüğü, kesinliği yoktur. Beyan edilen zaman şeklinde kullanılabilir.
<sxh java;title:Java>
BaseSignedData bs = new BaseSignedData();
bs.addContent(new SignableByteArray("test".getBytes()));
Since SigningTime attribute is optional,add it to optional attributes list
List<IAttribute> optionalAttributes = new ArrayList<IAttribute>();
optionalAttributes.add(new SigningTimeAttr(Calendar.getInstance()));
HashMap<String, Object> params = new HashMap<String, Object>();
params.put(EParameters.P_CERT_VALIDATION_POLICY, VALIDATION_POLICY);
bs.addSigner(ESignatureType.TYPE_BES, cert, signer, optionalAttributes, params);
</sxh>
<sxh csharp;title:C#>
BaseSignedData bs = new BaseSignedData();
bs.addContent(new SignableByteArray(Encoding.ASCII.GetBytes("test")));
Since SigningTime attribute is optional,add it to optional attributes list
List<IAttribute> optionalAttributes = new List<IAttribute>();
optionalAttributes.Add(new SigningTimeAttr(DateTime.UtcNow));
Dictionary<String, Object> params_ = new Dictionary<String, Object>();
params_[EParameters.P_CERT_VALIDATION_POLICY] = VALIDATION_POLICY;
bs.addSigner(ESignatureType.TYPE_BES, cert, signer, optionalAttributes, params_);
</sxh>
İmzanın beyan edilen zamanını almak için aşağıdaki örnek kod kullanılabilir.
<sxh java;title:Java>
byte[] input = AsnIO.dosyadanOKU(BESwithSIGNING_TIME);
BaseSignedData bs = new BaseSignedData(input);
List<EAttribute> attrs =
bs.getSignerList().get(0).getSignedAttribute(SigningTimeAttr.OID);
Calendar time = SigningTimeAttr.toTime(attrs.get(0));
System.out.println(time.getTime().toString());
</sxh>
<sxh csharp;title:C#>
byte[] input = AsnIO.dosyadanOKU(BESwithSIGNING_TIME);
BaseSignedData bs = new BaseSignedData(input);
List<EAttribute> attrs = bs.getSignerList()[0].
getSignedAttribute(AttributeOIDs.id_signingTime);
DateTime? time = SigningTimeAttr.toTime(attrs[0]);
Console.WriteLine(time.Value.ToString());
</sxh>
Beyan edilen zamanın kullanımında oluşabilecek kötü senaryo Şekil 17’daki gibidir. İmza atıldığı sırada imzacı sertifikası iptal edilmiştir; yalnız kullanıcı imza zamanı olarak daha önceki bir zamanı beyan etmiştir. Beyan edilen zamana güvenildiği durumda geçersiz olan bu imza doğrulanacaktır.
Şekil 17 Yanlış Beyan İle Kötü Kullanım Senaryosu