In today’s society, people have very little control over what kinds of personal data are collected and stored by various agencies
in both the private and public sectors. We describe an approach to addressing this problem that allows individuals to specify
constraints on the way their own data is used. Our solution uses formal methods to allow developers of software that processes
personal data to provide assurances that the software meets the specified privacy constraints. In the domain of privacy, it
is often not sufficient to express properties of interest as a relation between the input and output of a program as is done
for general program correctness. Here we consider a stronger class of properties that allows us to express constraints on
information flow. In particular, we can express that an algorithm does not leak any information from particular “sensitive”
values. We describe a general methodology for expressing this kind of information flow property as Hoare-style program verification
judgments. We begin with the Java Modelling Language (JML), which is a behavioral interface specification language designed
for Java, and we extend the language to include new concepts and keywords for expressing such properties. We use the Krakatoa
tool which starts from JML-annotated Java programs, generates proof obligations in the Coq Proof Assistant, and helps to automate
their proofs. We extend the Krakatoa tool to understand our extensions to JML and to generate the new form of required proof
obligations. We illustrate our method on several data mining algorithms implemented in Java.