It is possible for Bob and Alice to store many files on some host file server using a host-proof protocol -- i.e., in such a way that even the sysadmins of that server cannot decrypt and read the plaintext of those files.
You may be interested in browsing the questions with the host-proof tag.

As far as I know, there is only one way to prove that those sysadmins definitely have not read the plaintext of those files:


Never send the plaintext of those files directly to the host. Bob always encrypts each file before he sends it to the host.
Never send the file decryption key to the host. (Except perhaps in encrypted form, encrypted by some other key that is never sent in plaintext to the host server).


One way to do that is for Bob to generate encrypted files in OpenPGP format, and send those encrypted files to the host server.
(At the time of encryption, Bob uses his own public key and Alice's public key, in order to generate a file that can only be decrypted using either his own corresponding private key, or Alice's corresponding private key).
OpenPGP includes a message authentication code that can be used to prove that the sysadmins definitely have not modified the files, or replaced them entirely with files they created.

I hear that many people use other techniques that have some advantages and some disadvantages compared to standard OpenPGP.
Those techniques include convergent-encryption, gzip --rsyncable, rsync, rsyncrypto, and various combinations.

(There are many interesting ways of proving that a document was decrypted, but it sounds like that's not particularly useful in your application).

Is it possible to cryptographically prove when was the last time a ciphertext was decrypted/encrypted?
'm using a custom control from the ObjectListView package. It's widely used by stackoveflow members so that's why i post it here.

But i find it very hard to show data results in the DataTreeListView control. 
This is my code:

         DataSet ds = LoadDatasetFromXml("FamilyTree.xml");

         if (ds.Tables.Count &gt; 0)
         {
             this.dataGridView1.DataSource = ds;
             this.dataGridView1.DataMember = "Person";

             this.dataTreeListView1.DataMember = "Person";
             this.dataTreeListView1.DataSource = new DataViewManager(ds);
         }


And this is the result:


I use the xml that's provided with the package, so that won't be the problem. I changed all the dataTreeListView propertys so they are just the same as the demo project.

I also tried it using Linq with an selfmade table but with the same results. The datagridview on the other hand works like a charm...

Does anyone have an idea?
