# MAC times

MAC times são campos de metadados do sistema de arquivos que registram o último instante em que ocorreram certos eventos pertinentes a um dado arquivo. Os eventos são geralmente descritos como, "modificação" (modification), quando o conteúdo do arquivo foi modificado; "acesso" (access), quando alguma parte do arquivo foi acessada/lida; e "alteração de metadados" (metadata change), quando metadados de permissão ou de propriedade do arquivo foram modificados. Contudo, o acrônimo MAC é derivado dos termos "mtime", "atime", e "ctime", estruturas mantidas pelo sistema de arquivos do Unix.
O sistema de arquivos do Windows não atualiza o ctime quando um metadado de um arquivo é alterado, em vez disso, ele utiliza o campo para registrar o tempo de quando este arquivo foi criado, conhecido como "tempo de criação" (creation time) ou "tempo de nascimento" (birth time). Alguns outros sistemas também registram os tempos de criação dos arquivos, mas não existe um nome padrão para este metadado; no ZFS, por exemplo, o tempo de criação é armazenado num campo chamado "crtime".
MAC times são comumente usados na computação forense. O termo MAC time foi originalmente proposto por Dan Farmer, que desenvolveu uma ferramenta de mesmo nome.

## mtime (tempo de modificação)

O tempo de modificação de um arquivo (mtime) descreve quando o conteúdo do arquivo foi alterado pela última vez. No entanto, como a maioria dos sistemas de arquivos não comparam os dados escritos num arquivo com os dados que já estão lá, se um programa sobrescreve parte do arquivo com os mesmos dados que estavam lá previamente, o tempo de modificação será atualizado mesmo que o conteúdo não tenha, tecnicamente, mudado.

## atime (tempo de acesso)

O tempo de acesso de um arquivo (atime) identifica quando o arquivo foi aberto para leitura pela última vez. Um programa executado pode manter um arquivo "aberto" por algum tempo, dessa forma, o tempo no qual o arquivo foi aberto pode diferir do tempo em que seu conteúdo foi lido pela última vez.
Geralmente o tempo de acesso é atualizado mesmo se apenas uma pequena porção de um grande arquivo, por exemplo, for lida.
Como algumas configurações de computador são muito mais rápidas na leitura de dados do que na escrita, atualizar os tempos de acesso após cada operação de leitura pode ser muito custoso. Alguns sistemas mitigam este custo armazenando os tempos de acesso numa granularidade mais grossa do que outros tempos, relaxando um pouco a precisão com que os tempos de acesso são armazenados; mas ao arredondar os tempos de acesso para apenas a hora ou dia mais próximo, por exemplo, um arquivo que é lido repetidamente num curto espaço de tempo terá seu tempo de acesso atualizado apenas uma vez.
Alguns sistemas também fornecem opções para desabilitar a atualização dos tempos de acesso completamente.

## ctime (tempo de alteração de metadados e tempo de criação)

Os sistemas de arquivos do Unix e do Windows interpretam o "ctime" de maneiras diferentes:
* Sistemas Unix mantém a interpretação histórica do ctime, ou seja, interpretam-no como sendo o tempo em que um certo metadado de um arquivo, não seu conteúdo, foi alterado pela última vez, tal como metadados de permissões do arquivo ou de propriedade do arquivo (e.g. "Este metadado foi alterado em 05/05/02 12:15pm").
* Sistemas Windows usam o ctime para indicar o "tempo de criação" (também chamado de "tempo de nascimento") de um arquivo (e.g. "Este arquivo foi criado em 05/05/02 12:15pm").
Esta diferença no uso pode levar a uma apresentação incorreta dos metadados de tempo quando um arquivo criado no sistema Windows, por exemplo, for acessado através do sistema Unix, e vice-versa. A maioria dos sistemas de arquivos Unix não armazenam o tempo de criação de um arquivo, no entanto, sistemas como HFS+, ZFS, e UFS (Unix) o fazem. Já no NTFS, tanto o tempo de criação como o tempo de alteração de metadados são armazenados.
A semântica dos tempos de criação é fonte de algumas controvérsias. Uma visão acredita que os tempos de criação devem se referir ao conteúdo atual do arquivo, e.g. para uma foto digital o tempo de criação deveria ser marcado quando a foto foi tirada, ou quando esta foi armazenada num computador pela primeira vez. Uma abordagem diferente diz que o tempo de criação deve corresponder ao tempo em que o objeto em si foi criado no sistema de arquivos, e.g. quando o arquivo de foto foi restaurado de um backup pela última vez, ou quando foi movido de um disco para outro.

## Problemas com metadados

Como com todos os metadados de sistemas de arquivos, as expectativas do usuário sobre MAC times podem ser violadas por programas que não entendem os metadados. Alguns utilitários de cópia de arquivos irão explicitamente setar os MAC times da nova cópia exatamente como os do arquivo original. Programas que simplesmente criam um novo arquivo, leem o conteúdo do original, e escrevem os dados na nova cópia, irão produzir novos arquivos cujo ctimes não batem com os do original.
Alguns programas, na tentativa de evitar a perda de dados quando uma operação de escrita é interrompida, evitam modificar os arquivos existentes. Em vez disso, os dados atualizados são escritos em um novo arquivo, e este é movido para sobrescrever o original. Esta prática perde os metadados originais, a menos que o programa explicitamente copie os metadados do arquivo original.

## Aplicação na perícia forense

Os MAC times podem ser muito úteis numa investigação forense, pois mais importante do que saber quais eventos aconteceram, é saber a sequência em que eles aconteceram no tempo, de modo a determinar os passos executados pelo infrator. Além disso, eles podem ser coletados logo após o incidente, e até mesmo muito tempo depois, inclusive de arquivos já excluídos. Nos sistemas Unix os MAC times podem ser obtidos através da chamada de sistema lstat, no entanto, estes não são muito úteis quando a operação que se deseja investigar assemelha-se muito a uma operação comum do sistema em questão. Além disso, os MAC times são fáceis de forjar, através do comando touch ou da chamada de sistema utime, por exemplo, é possível alterar atimes e mtimes (para o ctime não é tão fácil assim, pois seu valor sempre é obtido a partir do relógio do sistema), dessa forma não deve-se confiar cegamente nos indícios obtidos através de MAC times.