Merge pull request 'steghide-tutorial' (#60) from Zesc/blog-contributions:steghide-tutorial into main

Reviewed-on: nihilist/blog-contributions#60
This commit is contained in:
nihilist 2024-09-28 09:01:41 +02:00
commit 74a31b4a02
14 changed files with 515 additions and 0 deletions

BIN
assets/img/Zesc.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -0,0 +1,97 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8">
<diagram name="Page-1" id="-AnAplpjT1635UPQJvuS">
<mxGraphModel dx="683" dy="402" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="UVfbn_i6WzX-7XoytX3o-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.001;exitY=0.503;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;exitPerimeter=0;dashed=1;dashPattern=1 4;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-5">
<mxGeometry relative="1" as="geometry">
<mxPoint x="100" y="619.8888888888889" as="targetPoint" />
<Array as="points">
<mxPoint x="160" y="640" />
<mxPoint x="160" y="620" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;startArrow=baseDash;startFill=0;endArrow=block;endFill=1;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-1" target="UVfbn_i6WzX-7XoytX3o-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;endArrow=block;endFill=1;startArrow=baseDash;startFill=0;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-1" target="UVfbn_i6WzX-7XoytX3o-3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="139.88505747126442" y="640" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;fillColor=#d5e8d4;strokeColor=#82b366;startArrow=baseDash;startFill=0;endArrow=block;endFill=1;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-1" target="UVfbn_i6WzX-7XoytX3o-3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="100" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-1" value="Alice" style="image;html=1;image=img/lib/clip_art/people/Suit_Woman_Green_128x128.png;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="80" y="720" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-2" value="Bob" style="image;html=1;image=img/lib/clip_art/people/Suit_Man_Green_128x128.png;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="560" y="720" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#d5e8d4;strokeColor=#82b366;endArrow=block;endFill=1;startArrow=baseDash;startFill=0;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-3" target="UVfbn_i6WzX-7XoytX3o-2">
<mxGeometry relative="1" as="geometry">
<mxPoint x="559.9999999999999" y="459.9230769230769" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-3" value="Third-Party Server&lt;div style=&quot;font-size: 9px;&quot;&gt;(performs content scanning)&lt;/div&gt;" style="image;html=1;image=img/lib/clip_art/people/Waiter_128x128.png;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="320" y="440" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-8" value="Alice builds association with Bob" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=9;fillColor=#f8cecc;strokeColor=#B85450;fontColor=#B85450;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-5">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="360" y="760" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-11" value="&#xa;&lt;span style=&quot;font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; background-color: rgb(24, 20, 29); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;Ok, Alice only contacts&lt;/span&gt;&lt;div style=&quot;forced-color-adjust: none; border-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;well-known third party&lt;/div&gt;&#xa;&#xa;" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.001;exitY=0.506;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;exitPerimeter=0;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;fontColor=#82B366;dashed=1;dashPattern=1 4;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-5">
<mxGeometry relative="1" as="geometry">
<mxPoint x="140" y="660.0776699029126" as="targetPoint" />
<Array as="points">
<mxPoint x="160" y="641" />
<mxPoint x="160" y="660" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-21" value="&lt;br&gt;&lt;br style=&quot;forced-color-adjust: none; border-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;span style=&quot;forced-color-adjust: none; border-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; background-color: rgb(24, 20, 29); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;Ok, Bob only contacts&lt;/span&gt;&lt;div style=&quot;forced-color-adjust: none; border-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;well-known third party&lt;/div&gt;&lt;br style=&quot;forced-color-adjust: none; border-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: nowrap; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#82B366;dashed=1;dashPattern=1 4;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="600" y="638.9047619047619" as="targetPoint" />
<mxPoint x="400" y="639" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-5" value="Eve&lt;div style=&quot;font-size: 9px;&quot;&gt;(monitors the network)&lt;/div&gt;" style="image;html=1;image=img/lib/clip_art/people/Security_Woman_128x128.png;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="320" y="600" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-17" value="Server rejects&lt;div style=&quot;font-size: 9px;&quot;&gt;encrypted file&lt;/div&gt;" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=1;exitDx=0;exitDy=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=9;labelPosition=left;verticalLabelPosition=bottom;align=right;verticalAlign=top;fontColor=#B85450;dashed=1;dashPattern=1 4;" edge="1" parent="1" source="UVfbn_i6WzX-7XoytX3o-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="210" y="540" as="sourcePoint" />
<mxPoint x="240" y="530" as="targetPoint" />
<Array as="points">
<mxPoint x="270" y="550" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-18" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.x;fillColor=#B85450;strokeColor=none;" vertex="1" parent="1">
<mxGeometry x="210" y="510" width="24.4" height="20" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-19" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#b85450;shadow=0;dashed=0;shape=mxgraph.ios7.icons.locked;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="210" y="510" width="24.4" height="20" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-22" value="Hidden&lt;div style=&quot;font-size: 7px;&quot;&gt;File&lt;/div&gt;" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=none;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.envelope_(empty);fillColor=none;fontSize=7;" vertex="1" parent="1">
<mxGeometry x="60" y="680" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-23" value="Normal&lt;div style=&quot;font-size: 6px;&quot;&gt;Encrypted&lt;/div&gt;&lt;div style=&quot;font-size: 6px;&quot;&gt;File&lt;/div&gt;" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=none;verticalAlign=top;strokeWidth=2;strokeColor=#b85450;shadow=0;dashed=0;shape=mxgraph.ios7.icons.envelope_(message);fillColor=none;fontSize=6;" vertex="1" parent="1">
<mxGeometry x="150" y="680" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-24" value="Any File" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=none;verticalAlign=top;strokeWidth=2;strokeColor=#b85450;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=none;fontSize=6;" vertex="1" parent="1">
<mxGeometry x="160" y="770" width="30" height="16.5" as="geometry" />
</mxCell>
<mxCell id="UVfbn_i6WzX-7XoytX3o-25" value="Download&lt;div style=&quot;font-size: 6px;&quot;&gt;Hidden File&lt;/div&gt;" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=none;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.down;fillColor=none;fontSize=6;" vertex="1" parent="1">
<mxGeometry x="630" y="682.25" width="21" height="25.5" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -0,0 +1,91 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" border="50" scale="3" compressed="false" locked="false" version="24.7.8">
<diagram name="Blank" id="YmL12bMKpDGza6XwsDPr">
<mxGraphModel dx="1758" dy="338" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" background="none" math="1" shadow="0">
<root>
<mxCell id="X5NqExCQtvZxIxQ7pmgY-0" />
<mxCell id="1" parent="X5NqExCQtvZxIxQ7pmgY-0" />
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#60a917;strokeColor=#2D7600;dashed=1;dashPattern=1 1;fontSize=10;" parent="1" source="ZqwhSL6MpZod2f_eJ4VQ-22" target="ZqwhSL6MpZod2f_eJ4VQ-25" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-22" value="" style="image;html=1;image=img/lib/clip_art/people/Suit_Woman_Green_128x128.png;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="-886" y="309" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-23" value="" style="image;html=1;image=img/lib/clip_art/people/Suit_Man_Green_128x128.png;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="-595" y="309" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#60a917;strokeColor=#2D7600;dashed=1;dashPattern=1 1;fontSize=10;" parent="1" source="ZqwhSL6MpZod2f_eJ4VQ-25" target="ZqwhSL6MpZod2f_eJ4VQ-23" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-25" value="Stenography" style="shape=message;html=1;html=1;outlineConnect=0;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fillColor=none;strokeColor=#b85450;dashed=1;dashPattern=1 1;fontSize=12;" parent="1" vertex="1">
<mxGeometry x="-730" y="329" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" parent="1" source="ZqwhSL6MpZod2f_eJ4VQ-47" target="ZqwhSL6MpZod2f_eJ4VQ-50" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-47" value="" style="image;html=1;image=img/lib/clip_art/people/Suit_Woman_Green_128x128.png;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="-886.5" y="389" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-48" value="" style="image;html=1;image=img/lib/clip_art/people/Suit_Man_Green_128x128.png;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="-595.5" y="389" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" parent="1" source="ZqwhSL6MpZod2f_eJ4VQ-50" target="ZqwhSL6MpZod2f_eJ4VQ-48" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-50" value="Cryptography&lt;div style=&quot;font-size: 12px;&quot;&gt;&lt;br style=&quot;font-size: 12px;&quot;&gt;&lt;/div&gt;" style="shape=message;html=1;html=1;outlineConnect=0;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fillColor=none;fontColor=#ffffff;strokeColor=#2D7600;fontSize=12;" parent="1" vertex="1">
<mxGeometry x="-730.5" y="409" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#60a917;strokeColor=#2D7600;dashed=1;dashPattern=1 1;fontSize=10;" parent="1" source="ZqwhSL6MpZod2f_eJ4VQ-52" target="ZqwhSL6MpZod2f_eJ4VQ-55" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-52" value="Alice" style="image;html=1;image=img/lib/clip_art/people/Suit_Woman_Green_128x128.png;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="-886" y="469" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-53" value="Bob" style="image;html=1;image=img/lib/clip_art/people/Suit_Man_Green_128x128.png;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="-595" y="469" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#60a917;strokeColor=#2D7600;dashed=1;dashPattern=1 1;fontSize=10;" parent="1" source="ZqwhSL6MpZod2f_eJ4VQ-55" target="ZqwhSL6MpZod2f_eJ4VQ-53" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-55" value="Cryptography + Stenography" style="shape=message;html=1;html=1;outlineConnect=0;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fillColor=none;fontColor=#ffffff;strokeColor=#2D7600;dashed=1;dashPattern=1 1;fontSize=12;" parent="1" vertex="1">
<mxGeometry x="-730" y="489" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="xqb2oua0AIk2pjXuZOhw-2" value="" style="group;fontSize=5;" vertex="1" connectable="0" parent="1">
<mxGeometry x="-793" y="561" width="18" height="34" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-60" value="Does the message resist attempts to read or alter it? (Confidentiality, Integrity)" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;outlineConnect=0;align=left;shape=mxgraph.office.security.lock_protected;fontSize=5;" parent="xqb2oua0AIk2pjXuZOhw-2" vertex="1">
<mxGeometry width="16.8" height="18.919803600654653" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-61" value="Can others detect that you are sending a message? (Deniability, Evasion)" style="html=1;verticalLabelPosition=middle;align=left;labelBackgroundColor=none;verticalAlign=middle;strokeWidth=2;shadow=0;dashed=0;shape=mxgraph.ios7.icons.eye;labelPosition=right;fontSize=5;" parent="xqb2oua0AIk2pjXuZOhw-2" vertex="1">
<mxGeometry y="26.153846153846143" width="18" height="7.846153846153843" as="geometry" />
</mxCell>
<mxCell id="xqb2oua0AIk2pjXuZOhw-3" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="-522" y="342" width="24" height="198" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-59" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.no_symbol;strokeWidth=0;fillColor=#2D7600;fontColor=#ffffff;strokeColor=none;perimeterSpacing=0;fontSize=8;whiteSpace=wrap;" parent="xqb2oua0AIk2pjXuZOhw-3" vertex="1">
<mxGeometry x="0.7058823529411765" y="170.18468271334788" width="22.58823529411765" height="27.815317286652075" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-26" value="Message protected" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;outlineConnect=0;align=left;shape=mxgraph.office.security.lock_protected;fillColor=none;fontColor=#ffffff;strokeColor=#2D7600;fontSize=8;whiteSpace=wrap;" parent="xqb2oua0AIk2pjXuZOhw-3" vertex="1">
<mxGeometry x="1.4176470588235295" y="61.99536105032823" width="19.764705882352942" height="29.461706783369802" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-41" value="Communication visible" style="html=1;verticalLabelPosition=middle;align=left;labelBackgroundColor=none;verticalAlign=middle;strokeWidth=2;strokeColor=#b85450;shadow=0;dashed=0;shape=mxgraph.ios7.icons.eye;fillColor=none;labelPosition=right;fontSize=8;whiteSpace=wrap;" parent="xqb2oua0AIk2pjXuZOhw-3" vertex="1">
<mxGeometry x="0.71" y="97.5883588621444" width="21.176470588235297" height="12.217943107221005" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-57" value="Message protected" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;outlineConnect=0;align=left;shape=mxgraph.office.security.lock_protected;fillColor=none;fontColor=#ffffff;strokeColor=#2D7600;fontSize=8;whiteSpace=wrap;" parent="xqb2oua0AIk2pjXuZOhw-3" vertex="1">
<mxGeometry x="1.411764705882353" y="136.47702407002188" width="19.764705882352942" height="29.461706783369802" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-58" value="Communication concealed" style="html=1;verticalLabelPosition=middle;align=left;labelBackgroundColor=none;verticalAlign=middle;strokeWidth=2;strokeColor=#2D7600;shadow=0;dashed=0;shape=mxgraph.ios7.icons.eye;fillColor=none;fontColor=#ffffff;labelPosition=right;fontSize=8;whiteSpace=wrap;" parent="xqb2oua0AIk2pjXuZOhw-3" vertex="1">
<mxGeometry x="1.411764705882353" y="177.98336980306343" width="21.176470588235297" height="12.217943107221005" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-15" value="Message not protected" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=#b85450;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;outlineConnect=0;align=left;shape=mxgraph.office.security.lock_unprotected;fillColor=none;fontSize=8;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-519.8805882352941" y="314" width="18.35294117647059" height="28.59518599562363" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-19" value="Communication concealed" style="html=1;verticalLabelPosition=middle;align=left;labelBackgroundColor=none;verticalAlign=middle;strokeWidth=2;strokeColor=#2D7600;shadow=0;dashed=0;shape=mxgraph.ios7.icons.eye;fillColor=none;fontColor=#ffffff;labelPosition=right;fontSize=8;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-521.2923529411764" y="358.9724288840262" width="21.176470588235297" height="12.217943107221005" as="geometry" />
</mxCell>
<mxCell id="ZqwhSL6MpZod2f_eJ4VQ-20" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.no_symbol;strokeWidth=0;fillColor=#2D7600;fontColor=#ffffff;strokeColor=none;perimeterSpacing=0;fontSize=8;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-521.9982352941176" y="351.1737417943107" width="22.58823529411765" height="27.815317286652075" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

View File

@ -0,0 +1,141 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../../../../../assets/img/favicon.png">
<title>Other sources of Plausible Deniability: Steganography</title>
<!-- Bootstrap core CSS -->
<link href="../../assets/css/bootstrap.css" rel="stylesheet">
<link href="../../assets/css/xt256.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="../../assets/css/main.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- Static navbar -->
<div class="navbar navbar-inverse-anon navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand-anon" href="\index.html">nihilist`s Blog</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="/about.html">About</a></li>
<li><a href="/blog.html">Categories</a></li>
<li><a href="https://blog.nowhere.moe/donate.html">Donate</a></li>
<li><a href="/contact.html">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
<!-- +++++ Posts Lists +++++ -->
<!-- +++++ First Post +++++ -->
<div id="anon2">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<a href="../index.html">Previous Page</a></br></br><p><img src="../../assets/img/Zesc.jpg" width="50px" height="50px"> <ba>Zesc - 2024-08-30</ba></p>
<h1>Other sources of Plausible Deniability: Steganography</h1>
<p>Steganography is the craft of hiding messages. It is a close relative of cryptography, but where cryptography strives to conceal the contents of a messages, steganography attempts to conceal its <i>presence</i>. Therefore <b>steganography helps avoiding suspicion and providing deniability</b>.</p>
</div>
</div><!-- /row -->
</div> <!-- /container -->
</div><!-- /white -->
<div id="anon3">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<p>The important difference between the two fields is adherence to <i><a href="https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle">Kerckhoffs's principle</a></i>: the assumption that an algorithm must be publicly known to guarantee that it has no flaws or backdoors. (This is the reason why you should only use open source crypto software and never roll your own crypto.)<br/>Steganography does the opposite by relying on <i>security by obscurity</i>: the method by which you hid your data must be kept secret.</p>
<p>That means that whilst complementary to cryptography, steganography on itself is less secure than the mathematically provable security provided by cryptography. Think of it as tucking away your valuables in secret location versus putting them into a sturdy safe. The safe may draw immediate attention by burglars, but provides reliable resistance to attacks, whilst it is up to chance whether they find your hidden stash.</p>
<h3>Then why use steganography at all?</h3>
<p>In military science, there is the concept of the <i>Integrated Survivability Onion</i> &mdash; in short, the idea that they can't kill you if they don't hit you, that they can't hit you if they don't shoot at you and that they can't shoot at you if they don't see you. The same thing applies to every good digital defense-in-depth approach. Using steganography can't harm you, but <b>it shouldn't be all your rely on</b>. In our example, a hidden safe is better than either option on its own.</p>
<p>Here a quick overview of using steganography alone, cryptography alone and combining the two:</p>
<div style="text-align: center; margin: 1px;"><img src="comparison.jpg" style="width:90%"></div>
<p>The main strength of steganography is that <b>steganography can conceal metadata</b> to some extent. Metadata (i.e. data about data and communications) is the primary way that state actors identify targets for closer scrutiny. When you can become guilty by association, <b>your primary concern may be communicating in public without anyone noticing</b> and not the confidentiality of your communications. (In fact, many cryptographic schemes attest the identity of the sender via signatures, which you should avoid when looking for <u>plausible</u> deniability in case of compromise.)</p>
<p>However, <b>some form of communication event must always occur</b>, so steganography exploits various side-channels in order to embed additional concealed data. <b>In order to thwart analysis of metadata, communicate through one or multiple uninvolved third party dead-drops</b>, preferably such with broad distribution (i.e. popular websites, like social media or message/image boards).</p>
<p>When relying on such third parties, <b>steganography can help circumventing censors</b>. If an adversary controls a critical link in the network and blocks all communications they can't inspect, you need to conceal your encrypted communications inside of superficially innocuous traffic. An example of this would be a corporate email server which denies all attachments it can not scan for malware.</p>
<div style="text-align: center; margin: 1px;"><img src="circumvention.jpg" style="width:86%"></div>
<p>The major downside of steganography however is the need to tell your target audience how to find your hidden messages. Where cryptography allows for secure key negotiation even in plain sight of adversaries, informing a party you don't already have a secure communication channel with might be impossible.</p>
</div>
</div><!-- /row -->
</div> <!-- /container -->
</div><!-- /grey -->
<!-- +++++ Footer Section +++++ -->
<div id="anonb">
<div class="container">
<div class="row">
<div class="col-lg-4">
<h4>Nihilism</h4>
<p>
Until there is Nothing left.
</p>
</div><!-- /col-lg-4 -->
<div class="col-lg-4">
<h4>My Links</h4>
<p>
<a target="_blank" rel="noopener noreferrer" href="http://blog.nowhere.moe/rss/feed.xml">RSS Feed</a><br/><a target="_blank" rel="noopener noreferrer" href="https://matrix.to/#/#nowheremoe:nowhere.moe">Matrix Chat</a><br/>
</p>
</div><!-- /col-lg-4 -->
<div class="col-lg-4">
<h4>About Zesc</h4>
<p style="word-wrap: break-word;"><u>Donate XMR:</u> 46BYryUrGcrcRbXFFgTZMYKg8UVY1FpwVfNfHc4GxCXMFwvVtg2YDuf8x8pF36yh4XFWpC3V2WrDgZh7w46MYZEQ3zJQhhR</p></br><p><u>Contact (Matrix):</u> @zesc:matrix.org </p>
</div><!-- /col-lg-4 -->
</div>
</div>
</div>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

BIN
opsec/steghide/apollo11.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 KiB

186
opsec/steghide/index.html Normal file
View File

@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../../../../../assets/img/favicon.png">
<title>Hiding files in images with steghide</title>
<!-- Bootstrap core CSS -->
<link href="../../assets/css/bootstrap.css" rel="stylesheet">
<link href="../../assets/css/xt256.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="../../assets/css/main.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- Static navbar -->
<div class="navbar navbar-inverse-anon navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand-anon" href="\index.html">nihilist`s Blog</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="/about.html">About</a></li>
<li><a href="/blog.html">Categories</a></li>
<li><a href="https://blog.nowhere.moe/donate.html">Donate</a></li>
<li><a href="/contact.html">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
<!-- +++++ Posts Lists +++++ -->
<!-- +++++ First Post +++++ -->
<div id="anon2">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<h1>Hiding files in images with steghide</h1>
<a href="../index.html">Previous Page</a></br></br><p><img src="../../assets/img/Zesc.jpg" width="50px" height="50px"> <ba>Zesc - 2024-08-30</ba></p>
<p>steghide is a mature GPL-licensed CLI tool for hiding arbitrary data inside of of image files (and some archaic audio formats). Its official web presence is located at <a href="https://steghide.sourceforge.net/">https://steghide.sourceforge.net/</a>. it conceals data inside a larger coverfile in a way that is indistinguishable to first-order statistical analysis. This means there is are anomalies in the file histogram, making most pictures innocuous without an original to compare to.</p>
</div>
</div><!-- /row -->
</div> <!-- /container -->
</div><!-- /white -->
<div id="anon3">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<h2><b>Basic Use</b></h2>
<p>steghide is ubiquitously mirrored in various repositories and package managers. You can also find a clone of the sourceforge repository <a href="https://github.com/StegHigh/steghide">on GitHub</a>. If you use APT, simply install it with</p>
<pre><code class="nim"># apt install steghide</code></pre>
<p>steghide uses subcommands, and the three most important ones are <code class="nim">info</code>, <code class="nim">embed</code> and <code class="nim">extract</code> which will be explained in sequence. For this tutorial, we are going to use the <a href="https://apod.nasa.gov/apod/ap240824.html">Astronomy Picture of the Day of 2024-08-24</a>, a beautiful image of the anti-twilight arch:</p>
<a href="apod20240824.jpg" style="text-align: center"><div><img src="apod20240824.jpg" style="width:250px;"></div></a>
<p>Our example file to hide is going to be <a href="https://bitcoin.org/bitcoin.pdf">Bitcoin: A Peer-to-Peer Electronic Cash System</a>, the original paper by Satoshi Nakamoto.</p>
<p>As mentioned above, the cover image must be larger than the file you wish to embed, <b>as a rule of thumb your coverfile should be 20 times larger</b>. (Hint: you can split larger files with tools like tar or 7z into smaller fragments to embed into a whole collection of cover files.) We can check how many bytes steghide can embed by using <code class="nim">steghide info <i>file</i></code>. In our case, it tells us that it can embed 232 KB and asks whether an attempt should be made at reading embed data without extracting. As there is nothing embedded yet, we decline with <kbd>n</kbd>.</p>
<pre><samp>"apod20240824.jpg":
format: jpeg
capacity: 232.6 KB
Try to get information about embedded data ? (y/n)
</samp></pre>
<p>The PDF is only 180 KB, so it fits. Next, we use <code class="nim">steghide embed -cf <i>coverfile</i> -ef <i>embedfile</i> -sf <i>destination</i></code> and get asked for a passphrase (make sure to remember it or safe it in a password manager). After re-entering the passphrase (you can set it beforehand with the <code class="nim">-p</code> option) it will write the processed file to the specified destination. You can also leave out the <code class="nim">-sf</code> option, in which case it defaults to overwriting the coverfile. Look at it and try to find a visual difference to the original:</p>
<a href="output1.jpg" style="text-align: center"><div><img src="output1.jpg" style="width:250px"></div></a>
<p>It's completely lost in the visual noise. As an experiment, let's try taking the difference of both images with a program like GIMP. This is what it looks like:</p>
<a href="difference.jpg" style="text-align: center"><div><img src="difference.jpg" style="width:250px"></div></a>
<p>A difference of zero means a fully black pixel. Try zooming in and you'll see that only a few pixels are slightly lighter than black. These are the pixels that contain parts of your embedded file in their least significant bits.</p>
<div><b>WARNING: changing the output file in anyway will make the embedded file irretrievable. This is especially important for every form of lossy compression!</b></div>
<p>Now let's try to extract the file we've just hid. For this, use <code class="nim">steghide embed -sf <i>input</i></code></p>. This will prompt you for the passphrase. Enter it, and the contents will be extracted into the working directory. In our case we will be asked whether we want to overwrite the file with the same name that already exists. (You can suppress this warning with <code class="nim">-f</code> or by specifying an alternative output destination with <code class="nim">-xf</code>. Here, I used the later so we can confirm the files to be identical with md5sum:
<pre><samp>d56d71ecadf2137be09d8b1d35c6c042 bitcoin.pdf
d56d71ecadf2137be09d8b1d35c6c042 output.pdf</samp></pre>
<p>And they are! This concludes the basic introduction to steghide. Some advanced details follow below, but in most cases, reading the well-written man page suffices.</p>
</div>
</div><!-- /row -->
</div> <!-- /container -->
</div><!-- /grey -->
<!-- +++++ Second Post +++++ -->
<div id="anon1">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<h2><b>Advanced Use</b></h2>
<h3><b>Common Pitfalls</b></h3>
<p>There are a couple of things you shouldn't do with steghide. Here a quick overview:</p>
<ol>
<li><p><b>Use strong passwords:</b> Always a given. The password to steghide can be brute-forced like every other password. <a href="https://github.com/RickdeJager/stegseek">stegseek</a> can brute force 14 million passwords in under 2 seconds.</p></li>
<li><p><b>Use original images:</b> Known images can be easily double-checked against your cover files. If for example the Monero icon on your website is different to that included in the official press kit, that's suspicious, defeating the purpose of steganography. Make sure to only use this with originals only you are in possession of - in a pinch, adding an in-picture caption, resizing it, etc. offers plausible deniability, as different image editing programs are notoriously variant in handling pixel-level details.</p></li>
<li><p><b>Avoid images with little detail:</b> Images without pixel-level visual noise (e.g. diagrams, images of text, etc.) will have less hiding space, and become visible deteriorated when files are embedded. For demonstration purposes, compare <a href="map.jpg">this map</a> with its <a href="map_orig.jpg">original</a>, then look at <a href="map_diff.jpg">their difference</a>. The embedded file was a mere 4286 B in size, yet these two files differ by 6693 B in size! (The password is left as a brute-forcing exercise for the reader.)</p></li>
<li><p><b>Avoid format conversions:</b> Even "lossless" conversions from one image format to another tend to be non-reversible, making it impossible to retrieve the hidden data. Remember that many popular websites compress all images uploaded to them to save on bandwidth, making them unsuitable for our purposes.</p></li>
</ol>
<h3><b>Changing the encryption</b></h3>
<p>As you've seen, steghide needs a passphrase to embed and extract data. (Note: using an empty passphrase can lead to issues extracting.) This passphrase is used to both encrypt your file before embedding and to seed the PRNG by which it selects pixel positions for embedding data. By default, it uses AES-128. You should not rely on steghide for securing your data cryptographically (see the <a href="../stegaography/index.html">introduction to steganography</a>), and when in doubt you can separately encrypt the file before embedding, but you may still want to change the used algorithm. For this, simply use <code class="nim">-e <i>algorithm</i> <i>mode</i></code>. You can list all available modes with <code class="nim">steghide encinfo</code>. So as example, to embed our previous picture using AES-256 in cipher feedback mode, you would use this:</p>
<pre><code class="nim">$ steghide embed -cf apod20240824.jpg -ef bitcoin.pdf -e rijandael-256 cfb </code></pre>
<h3><b>Using steghide recursively</b></h3>
<p>Since steghide works on arbitrary binary data, you can embed steghide's output into another picture, provided the size is sufficient. The 4.8 MB picture below contains a 260 KB waveform audio file which in turns contains 2.7 KB UTF-8 encoded text file. (The passphrase is <kbd>moon</kbd> for both.)</p>
<a href="apollo11.jpg" style="text-align: center"><div><img src="apollo11.jpg" style="width:250px"></div></a>
<p></p>
<p></p>
</div>
</div><!-- /row -->
</div> <!-- /container -->
</div><!-- /white -->
<!-- +++++ Footer Section +++++ -->
<div id="anonb">
<div class="container">
<div class="row">
<div class="col-lg-4">
<h4>Nihilism</h4>
<p>
Until there is Nothing left.
</p>
</div><!-- /col-lg-4 -->
<div class="col-lg-4">
<h4>My Links</h4>
<p>
<a target="_blank" rel="noopener noreferrer" href="http://blog.nowhere.moe/rss/feed.xml">RSS Feed</a><br/><a target="_blank" rel="noopener noreferrer" href="https://matrix.to/#/#nowheremoe:nowhere.moe">Matrix Chat</a><br/>
</p>
</div><!-- /col-lg-4 -->
<div class="col-lg-4">
<h4>About Zesc</h4>
<p style="word-wrap: break-word;"><u>Donate XMR:</u> 46BYryUrGcrcRbXFFgTZMYKg8UVY1FpwVfNfHc4GxCXMFwvVtg2YDuf8x8pF36yh4XFWpC3V2WrDgZh7w46MYZEQ3zJQhhR</p></br><p><u>Contact (Matrix):</u> @zesc:matrix.org </p>
</div><!-- /col-lg-4 -->
</div>
</div>
</div>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
</body>
</html>

BIN
opsec/steghide/map.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
opsec/steghide/map_diff.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
opsec/steghide/map_orig.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
opsec/steghide/output1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB