Ich kenne das Paket `zed-csp` nicht. Aber in diesem Fall scheint es zu funktionieren, wenn man `zed-csp` nach `hyperref` lädt:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[debug]{hyperref}
\usepackage{zed-csp}
\begin{document}
\begin{zed}
c*c = \\
\t1 a*a + b*b
\end{zed}
\end{document}
Der Fehler bei umgekehrter Reihenfolge deutet allerdings auf einen Konflikt hin, der ernst genommen werden sollte. Wahrscheinlich führt die gezeigte Vertauschung der Paketreienfolge zu einem anderen Problem.
Potentielle Kandidaten für Probleme wären beispielsweise das Encoding von Bookmarks durch `hyperref`.
Eventuell ist die Umdefinierung eines Low-Level-Macros (das gilt eigentlich für alle Ein-Buchstaben-Makros) in `zed-csp` generell kritisch. Es handelt sich dabei nämlich bei LaTeX2e um ein Low-Level-Encoding-Macro. Dagegen macht `zed-csp` daraus offenbar so eine Art Tabulator. Eventuell sollte `zed-csp` hier zumindest für `hyperref` angepasst werden. Dies umso mehr als nicht dokumentiert ist, dass das ursprüngliche `\t` nach dem Laden des Pakets als `\tie` verfügbar ist. Auch wenn das Paket schon sehr alt ist, empfehle ich in jedem Fall einen Bug-Report. Eventuell kann der Paketautor wenigstens entsprechende Hinweise in die Anleitung aufnehmen.
Um die genannten Probleme zu entschärfen, wäre eventuell folgende Lösung vorzuziehen:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{zed-csp}
\NewCommandCopy\ztab\t
\RenewCommandCopy\t\tie
\NewCommandCopy\ztab\t% Neue Bedeutung von \t in \ztab speichern.
\RenewCommandCopy\t\tie% Alte Bedeutung von \t wiederherstellen. (Braucht man nicht, wenn später hyperref geladen wird.)
\usepackage[debug]{hyperref}
\begin{document}
\begin{zed}
c*c = \\
\ztab1 a*a + b*b
\end{zed}
\end{document}
Hierbei wird die ursprüngliche Bedeutung von `\t` erhalten. Die `zed-csp`-Bedeutung von `\t` ist dagegen via `\ztab` verfügbar. Sollte eine ältere LaTeX-Version verwendet werden, die noch nicht über `\NewCommandCopy` und `\RenewCommandCopy` verfügt, so sind die beiden Anweisungen ggf. durch `\let` ersetzbar.
Um in der Umgebung `zed` trotzdem `\t` statt `\ztab` verwenden zu können, kann man den neuen Hook-Mechanismus von LaTeX ab Version 2020/10/01 verwenden:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{zed-csp}
\NewCommandCopy\ztab\t% Neue Bedeutung von \t in \ztab speichern.
\RenewCommandCopy\t\tie% Alte Bedeutung von \t wiederherstellen. (Braucht man nicht, wenn später hyperref geladen wird.)
\AddToHook{env/zed/begin}[zed-csp]{\RenewCommandCopy\t\ztab}% Neue Bedeutung von \t am Anfang von zed reaktivieren.
\usepackage[debug]{hyperref}
\begin{document}
\begin{zed}
c*c = \\
\t1 a*a + b*b
\end{zed}
\end{document}
Ob das in jedem Fall funktioniert, kann ich nicht sagen, da – wie erwähnt – `\t` eine Low-Level-Anweisung aus der Font-Encoding-Verwaltung des LaTeX-Kerns ist.
Insgesamt macht das Paket auf mich den Eindruck, dass es eine eher unzureichende Anpassung eines LaTeX-2.09-Styles an LaTeX2e ist. Eventuell wäre es besser, sich ein anderes Paket für den Zweck zu suchen.
Die unbekannte Option `zed`, die vermutlich noch von der (gnadenlos veralteten) LaTeX-2.09-Syntax (Verwendung von `\documentstyle`) stammt, habe ich übrigens ebenso entfernt, wie das seit April 2018 überflüssig `\usepakcage[utf8]{inputenc}`.
`\usepackage[utf8]{inputenc}`.
Es sei noch einmal explizit darauf hingewiesen, dass alle hier gezeigten Lösungsmöglichkeiten lediglich üble Hacks sind. Es sei auch darauf hingewiesen, dass das Problem eher genereller Natur ist, also nicht nur im Zusammenspiel mit `hyperref` Probleme auftreten können. LaTeX-Kernel-Anweisungen mit einer komplett abweichenden Bedeutung neu zu definieren, ist immer gefährlich. Am saubersten ist vermutlich die zweite Lösung. Das gilt auch, wenn `hyperref` nicht verwendet wird! Besser wäre jedoch, das Problem in `zed-csp` (und ggf. den davon abhängigen Tools) zu lösen, so dass `\t` gar nicht erst umdefiniert wird. Dazu sei als erster Schritt ein Bug-Report an den Autor empfohlen.