diff --git a/docs/dispatch-archive/README.md b/docs/dispatch-archive/README.md new file mode 100644 index 0000000..17ebbb3 --- /dev/null +++ b/docs/dispatch-archive/README.md @@ -0,0 +1,45 @@ +# IOTrust Dispatch — Front-Page Archive + +A running collection of the IOTrust Dispatch (`/news`) front page, captured each +time the lead story or the page design changes. Think of it as the lab's shelf of +back issues: a magazine keeps every cover, and so do we. Each entry preserves how +the front page looked at a moment in time, the lead story of that issue, and the +exact commit that produced the design. + +## How to add an entry + +When the front page changes in a way worth keeping (new design, notable lead +story), capture it before or right after the change: + +1. Run the site locally (`npm run dev`) and open `/news`. +2. Screenshot the full front page into `assets/` using the naming pattern + `dispatch-v--front-page.png`. +3. Add a section below with the date, the lead story, a one-line note on what is + distinctive about the design, and the short commit SHA it was captured at. + +Keep entries newest-first. + +--- + +## v1 — 2026-07-24 · Serif masthead, KPCW front story + +**Front page — home `/#news`:** + +![Dispatch front page (home /#news), v1](assets/dispatch-v1-2026-07-24-front-page.png) + +**News index — `/news`:** + +![Dispatch news index (/news), v1](assets/dispatch-v1-2026-07-24-news-index.png) + +- **Front story:** *Luis Garcia Breaks Down AI Guardrails and Mythos on KPCW* (May 18, 2026) +- **Design:** The serif **"IOTrust Dispatch"** masthead under a double rule; a + large "Front Page" lead card (portrait photo with a gradient-overlaid caption + on the left, headline + summary + tags on the right) beside a column of three + briefs. The `/news` index mirrors it as a running newspaper — a three-column + lead band over a divided list of the remaining stories. +- **Captured at:** `e405221` (main, before the PETS 2026 issue). +- **Retired by:** the PETS 2026 issue, which promotes *Jainta Paul Presents + "Sensor Privacy as a Spectrum" at PETS 2026 in Calgary* to the front story + (with the Calgary group photo as the cover), makes the front-story cover + caption data-driven, and extends article pages to carry in-line figures, + hyperlinks, and citations. diff --git a/docs/dispatch-archive/assets/dispatch-v1-2026-07-24-front-page.png b/docs/dispatch-archive/assets/dispatch-v1-2026-07-24-front-page.png new file mode 100644 index 0000000..e87aba6 Binary files /dev/null and b/docs/dispatch-archive/assets/dispatch-v1-2026-07-24-front-page.png differ diff --git a/docs/dispatch-archive/assets/dispatch-v1-2026-07-24-news-index.png b/docs/dispatch-archive/assets/dispatch-v1-2026-07-24-news-index.png new file mode 100644 index 0000000..e49077b Binary files /dev/null and b/docs/dispatch-archive/assets/dispatch-v1-2026-07-24-news-index.png differ diff --git a/public/images/news/pets-2026-jainta-calgary.jpg b/public/images/news/pets-2026-jainta-calgary.jpg new file mode 100644 index 0000000..2f2014a Binary files /dev/null and b/public/images/news/pets-2026-jainta-calgary.jpg differ diff --git a/public/images/news/popets-2026-sensing-inference-pipeline.png b/public/images/news/popets-2026-sensing-inference-pipeline.png new file mode 100644 index 0000000..8769be3 Binary files /dev/null and b/public/images/news/popets-2026-sensing-inference-pipeline.png differ diff --git a/src/app/news/[id]/page.tsx b/src/app/news/[id]/page.tsx index 66eca2c..1f4387a 100644 --- a/src/app/news/[id]/page.tsx +++ b/src/app/news/[id]/page.tsx @@ -1,4 +1,5 @@ import type { Metadata } from "next"; +import type { ReactNode } from "react"; import Image from "next/image"; import Link from "next/link"; import { notFound } from "next/navigation"; @@ -21,6 +22,62 @@ function formatDate(date: string) { }).format(new Date(`${date}T00:00:00Z`)); } +// A body entry is either a paragraph string or a figure block. +type FigureBlock = { + type: "figure"; + image: string; + alt: string; + caption?: string; + credit?: string; +}; +type BodyBlock = string | FigureBlock; + +const inlineLinkClass = + "font-medium text-brand-700 underline decoration-brand-300 underline-offset-[3px] transition-colors hover:text-brand-800 hover:decoration-brand-500 dark:text-brand-300 dark:decoration-brand-500/70 dark:hover:text-brand-200"; + +// Renders markdown-style [label](url) links inside a plain paragraph string. +// Root-relative links (starting with "/") use next/link; the rest open in a new tab. +function renderInline(text: string): ReactNode[] { + const regex = /\[([^\]]+)\]\(([^)]+)\)/g; + const nodes: ReactNode[] = []; + let lastIndex = 0; + let key = 0; + let match: RegExpExecArray | null; + + while ((match = regex.exec(text)) !== null) { + if (match.index > lastIndex) { + nodes.push(text.slice(lastIndex, match.index)); + } + const [full, label, url] = match; + if (url.startsWith("/")) { + nodes.push( + + {label} + + ); + } else { + nodes.push( + + {label} + + ); + } + lastIndex = match.index + full.length; + } + + if (lastIndex < text.length) { + nodes.push(text.slice(lastIndex)); + } + + return nodes; +} + export async function generateStaticParams() { return data.map((post) => ({ id: post.id, @@ -62,11 +119,17 @@ export default async function NewsPost({ params }: PageProps) { notFound(); } - const articleBody = Array.isArray((post as { body?: unknown }).body) - ? (post as { body: string[] }).body + const articleBody: BodyBlock[] = Array.isArray((post as { body?: unknown }).body) + ? (post as { body: BodyBlock[] }).body : []; const isPortraitImage = (post as { imageLayout?: string }).imageLayout === "portrait"; + const cover = post as { + coverKicker?: string; + coverLabel?: string; + coverNote?: string; + coverCredit?: string; + }; const postForJsonLd = post as typeof post & { socialImage?: string }; return ( @@ -134,20 +197,24 @@ export default async function NewsPost({ params }: PageProps) { priority /> - {isPortraitImage ? ( + {isPortraitImage && (cover.coverKicker || cover.coverLabel || cover.coverNote || cover.coverCredit) ? (
-

- Radio Interview -

-

- KPCW Mountain Money -

-

- Luis Garcia discussed AI guardrails, Mythos Preview, and why high-capability tools need structured test environments. -

-

- Photo: Kahlert School of Computing -

+ {cover.coverKicker ? ( +

+ {cover.coverKicker} +

+ ) : null} + {cover.coverLabel ? ( +

+ {cover.coverLabel} +

+ ) : null} + {cover.coverNote ?

{renderInline(cover.coverNote)}

: null} + {cover.coverCredit ? ( +

+ {cover.coverCredit} +

+ ) : null}
) : null} @@ -155,14 +222,47 @@ export default async function NewsPost({ params }: PageProps) { {articleBody.length ? (
- {articleBody.map((paragraph) => ( -

- {paragraph} -

- ))} + {articleBody.map((block, index) => { + if (typeof block === "string") { + return ( +

+ {renderInline(block)} +

+ ); + } + + if (block?.type === "figure") { + return ( +
+
+ {block.alt} +
+ {block.caption || block.credit ? ( +
+ {block.caption ? renderInline(block.caption) : null} + {block.credit ? ( + + {block.credit} + + ) : null} +
+ ) : null} +
+ ); + } + + return null; + })}
) : null} diff --git a/src/app/page.tsx b/src/app/page.tsx index 2ce6a3a..51e4fc2 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -491,6 +491,7 @@ function RecentNews() { const [lead, ...briefs] = items; const leadImageIsPortrait = (lead as { imageLayout?: string }).imageLayout === 'portrait'; + const cover = lead as { coverKicker?: string; coverLabel?: string; coverCredit?: string }; return (
@@ -521,7 +522,7 @@ function RecentNews() { : 'grid gap-8 py-8 lg:grid-cols-[minmax(0,1.1fr)_minmax(320px,0.9fr)]' } > - {lead.image ? ( + {lead.image && leadImageIsPortrait ? (
-
-

- Radio Interview -

-

- KPCW Mountain Money -

-

- Photo: Kahlert School of Computing -

-
+ {cover.coverKicker || cover.coverLabel || cover.coverCredit ? ( +
+ {cover.coverKicker ? ( +

+ {cover.coverKicker} +

+ ) : null} + {cover.coverLabel ? ( +

+ {cover.coverLabel} +

+ ) : null} + {cover.coverCredit ? ( +

+ {cover.coverCredit} +

+ ) : null} +
+ ) : null}
@@ -577,6 +586,60 @@ function RecentNews() {
+ ) : lead.image ? ( + +
+ {lead.title} +
+ {cover.coverKicker || cover.coverCredit ? ( +
+ {cover.coverKicker ? ( + + {cover.coverKicker} + + ) : null} + {cover.coverCredit ? ( + + {cover.coverCredit} + + ) : null} +
+ ) : null} +
+
+ + Front Page + + {formatNewsDate(lead.date)} +
+

+ {lead.title} +

+

+ {lead.summary} +

+
+ {lead.tags.slice(0, 3).map((tag) => ( + + {tag} + + ))} +
+ + Read front story + +
+ ) : ( m.role.toLowerCase().includes('intern')) + ); const sortedAlumni = byFirstName(alumni); const encodedLeadEmail = encodeEmailAddress(labInfo.lead.email); @@ -1122,6 +1188,7 @@ export default async function HomePage() { +
diff --git a/src/data/news.json b/src/data/news.json index 5c0208d..d215918 100644 --- a/src/data/news.json +++ b/src/data/news.json @@ -1,4 +1,58 @@ [ + { + "id": "2026-pets-jainta-sensor-privacy", + "title": "Jainta Paul Presents 'Sensor Privacy as a Spectrum' at PETS 2026 in Calgary", + "date": "2026-07-24", + "tags": ["Conference", "PETS 2026", "Sensor Privacy"], + "summary": "At PETS 2026 in Calgary, PhD student Jainta Paul presented 'Sensor Privacy as a Spectrum,' a study showing that the sparse outputs edge devices share can reveal far more about what people are doing than 'keeping the data on-device' would suggest.", + "body": [ + "Picture the fitness band on your wrist. To save battery and, supposedly, to protect your privacy, it does its thinking on the device and sends out almost nothing, often little more than a flag that flips between moving and still. It sounds like a fair deal: the raw motion never leaves your wrist, so what could a single yes-or-no bit really give away? As it turns out, quite a lot.", + "That is the question [Jainta Paul](/people/jainta) carried to [PETS 2026](https://petsymposium.org/), the Privacy Enhancing Technologies Symposium, held this July in Calgary. His paper, [Sensor Privacy as a Spectrum](https://doi.org/10.56553/popets-2026-0124), takes aim at a habit that has crept into how we talk about edge devices: treating 'the data stays on the device' as if it were the same sentence as 'it stays private.'", + "Edge and on-device AI are usually pitched on privacy. The raw stream stays local, and the device shares only a trimmed-down result: a label, a short embedding, a compressed feature, a single event. Because those outputs look small and purpose-built, they get waved through as safe by design. Paul and his co-authors show why that is only half the story. An output that is meaningless to a person can still be rich to a model that knows how people tend to move, can watch the signal unfold over time, and can line it up against data it already holds. The concern is not new. Earlier work had shown that motion traces from a VR headset can pick out individual users. What this paper adds is a way to measure how that leakage grows and shrinks as you change what the device exposes.", + "Rather than sort systems into private or not, the paper treats privacy as a spectrum and pins down where a design lands. It splits the risk into two parts. Statistical leakage is a ceiling: the most a channel could ever reveal, fixed by the physics of the sensor, where it sits on the body, and how coarsely its output is chopped up. Algorithmic leakage is what an attacker actually pries loose from underneath that ceiling by exploiting structure it leaves behind: the rhythm of a signal over time, the way several sensors move together, and whatever outside knowledge the attacker walks in with.", + { + "type": "figure", + "image": "/images/news/popets-2026-sensing-inference-pipeline.png", + "alt": "Diagram of a sensing-to-inference pipeline: a person's activity generates several sensor signals; some channels are marked attacker-accessible in red and others private in black; an on-device model releases a small exposed output that an adversary observes.", + "caption": "How the paper frames the problem: one real activity throws off many sensor signals at once. Some channels are visible to an attacker (red), others stay on the device (black), and the model releases only a small output. Yet that sliver, plus a little context, is often enough to work backward to what someone was doing.", + "credit": "Figure 2 from Paul et al., PoPETs 2026" + }, + "The distance between those two is where the numbers start to sting. Give an attacker only a coarse on-off signal with its timing shuffled, and guessing which of seven everyday activities someone was doing sits around 30 to 35 percent, better than a coin toss but close to the hard limit the authors work out on paper. Show that same signal in order, as one continuous stretch of time, and accuracy climbs into the high fifties. Hand over the raw accelerometer and gyroscope and it reaches anywhere from 70 to nearly 99 percent inside a single dataset, though that richer leakage is fussy, pinned to the exact device and body position, so it travels badly to other settings.", + "The finding most likely to worry a product team is what happens once modern representation learning joins in. Models trained to align different sensors in a shared space can quietly build bridges between them, so a cheap, low-sensitivity motion signal starts to stand in for the richer channels it was trained alongside. An inertial sensor, in other words, can begin to hint at things you would assume needed a camera or a microphone, even though no audio or video is ever sent.", + "To keep the study honest about real hardware rather than tidy benchmarks, the team built a new dataset, UTAH-STM-HAR, on [STMicroelectronics](https://www.st.com/)' SensorTile.box PRO, running the chip's on-sensor machine-learning core so the device emitted the same kind of terse output a shipping wearable would. Eleven volunteers worked through seven activities (walking, jogging, climbing and descending stairs, sitting, standing, and lying down), each wearing five sensors at once, and the results were checked against three public datasets. The work ran under IRB approval with de-identified data, and it studies population-level patterns rather than trying to unmask any single person. STMicroelectronics co-authors, who helped design and validate the embedded platform, round out the author list alongside undergraduate researcher [Miles Bovero](/people/miles_bovero).", + "The takeaway is not that edge computing is a mistake. It is that 'local' should not be where the privacy conversation ends. The authors argue for reporting privacy as something measured, tied to what a device actually exposes and what an attacker can realistically observe, and they hand designers concrete dials to turn: how finely to quantize an output, how fast to sample, how many channels to expose, whether to preserve timing, and where on the body a sensor sits.", + "Paul presented the work as a speaker at the symposium, where he and IOTrust PI [Luis Garcia](/people/lag) represented the lab, Calgary Stampede hats and all. The research was supported by the National Institutes of Health (grant R61MH135109) and the National Science Foundation (grant 2425711)." + ], + "image": "/images/news/pets-2026-jainta-calgary.jpg", + "coverKicker": "PETS 2026 · Calgary", + "coverCredit": "Photo: Luis Garcia", + "links": [ + { + "label": "Read the paper (PoPETs 2026)", + "url": "https://doi.org/10.56553/popets-2026-0124" + }, + { + "label": "Paper PDF", + "url": "https://petsymposium.org/popets/2026/popets-2026-0124.pdf" + }, + { + "label": "PETS 2026 Symposium", + "url": "https://petsymposium.org/" + }, + { + "label": "Jainta Paul profile", + "url": "/people/jainta" + }, + { + "label": "Luis Garcia profile", + "url": "/people/lag" + }, + { + "label": "Browse lab publications", + "url": "/publications" + } + ] + }, { "id": "2026-mountain-money-mythos-garcia", "title": "Luis Garcia Breaks Down AI Guardrails and Mythos on KPCW", @@ -15,6 +69,10 @@ "image": "/images/news/luis-garcia-kpcw-mythos.jpg", "imageLayout": "portrait", "socialImage": "/images/social/iotrust-news-mythos-og.png", + "coverKicker": "Radio Interview", + "coverLabel": "KPCW Mountain Money", + "coverNote": "Luis Garcia discussed AI guardrails, Mythos Preview, and why high-capability tools need structured test environments.", + "coverCredit": "Photo: Kahlert School of Computing", "links": [ { "label": "Listen on KPCW", diff --git a/src/data/publications.json b/src/data/publications.json index a702e2d..a3e8716 100644 --- a/src/data/publications.json +++ b/src/data/publications.json @@ -1,5 +1,27 @@ { "recentPublications": [ + { + "id": "paul2026-sensor-privacy-spectrum", + "title": "Sensor Privacy as a Spectrum: Quantifying Privacy in Edge and Multimodal Systems through Games", + "authors": [ + "Jainta Paul", + "Miles Bovero", + "Swapnil Saha", + "Mahesh Chowdhary", + "Pratik Soni", + "Luis Garcia" + ], + "venue": "Proceedings on Privacy Enhancing Technologies (PoPETs)", + "year": 2026, + "type": "journal", + "abstract": "Edge intelligence is often assumed to improve privacy because raw sensor streams remain local and only constrained outputs (e.g., binary events, quantized embeddings, or compressed features) are exposed. We show this assumption is misleading: even minimal on-device outputs can retain structured semantics that enable adversaries to infer sensitive behaviors under realistic context and access regimes. We introduce a game-based framework that separates two sources of leakage: statistical leakage, bounded by the information capacity of the observable channel, and algorithmic leakage, unlocked when adversaries exploit temporal coherence, multi-channel structure, or auxiliary context within that bound. Across embedded, smartphone, and multimodal sensing datasets, we find that a quantized motion interface can preserve 70-75% of behavioral structure (via information- and divergence-based scores) and enable ~65% activity inference accuracy (about 4x random guessing) once temporal continuity is restored. Exposing richer continuous channels further increases in-domain leakage but becomes strongly placement- and device-specific, degrading transfer across sensors and datasets. Finally, we show that representation learning can induce cross-modal bridges that erode sensing-layer constraints, making seemingly low-sensitivity IMU signals more predictive of private semantic attributes associated with hidden high-fidelity modalities. Together, these results show that privacy in edge AI is shaped by an interaction between physical constraints and observable-interface design, motivating co-designed sensing, model, and evaluation choices that quantify and limit interface-induced leakage rather than assuming locality implies privacy.", + "keywords": ["edge sensing", "privacy leakage", "multimodal inference", "information flow"], + "url": "https://doi.org/10.56553/popets-2026-0124", + "tags": [], + "pages": "341--357", + "organization": "Privacy Enhancing Technologies Symposium", + "themeIds": ["iot-sensor-privacy"] + }, { "id": "ahmed2025-icstracker", "title": "ICSTracker: Backtracking Intrusions in Modern Industrial Control Systems",