You're mostly right. The index is a representation of the working directory tree and any modification of the index will modify .git/index. The thing is in git a directory (a tree in git language) is a collection of files references (of blobs hashes), thus the index is the staged tree, a collection of blobs hashes that will become the tree of your next commit. Blobs content are stored objects in .git/objects.
There is a reference of the index format in: Documentation/technical/index-format.txt [1]
There is a reference of the index format in: Documentation/technical/index-format.txt [1]
[1]: https://github.com/git/git/blob/master/Documentation/technic...