1. A method comprising: receiving a designation of a file system stored on untrusted storage; representing the file system according to an authenticated data structure, including a tree structure comprising a first subtree and a free list represented as a second subtree including a list of pointers to subtrees of removed blocks of the tree structure, by mirroring a directory structure of the file system onto the tree structure; erasure coding the file system; erasure coding the authenticated data structure representing the file system; storing a parity structure for the file system and a parity structure of the authenticated data structure at a trusted portal; verifying the storage of the file system by issuing a challenge to the storage to return a set of blocks of the file system and verifying a response from the storage; wherein a challenge comprises a list of random, uniformly selected blocks of the file system; wherein the response includes the requested file block and metadata for the requested file block; wherein verifying a response from the storage comprises verifying a path of each respective challenged file block to a root of the authenticated data structure represented by metadata of the response from the storage; and wherein issuing a challenge to the storage to return a set of blocks of the file system comprises at least one of issuing a batch of challenges to the storage and issuing a challenge seed to the storage, the storage configured to transform the seed to generate a plurality of challenges; tracking a number of nodes in the authenticated data structure to the left and right of the path during a traversal of the path; and determining whether an identifier of the file block of the range of identifiers corresponds to a file block included in the set of file blocks of the challenge.