diff --git a/web/utils/device-id.js b/web/utils/device-id.js
new file mode 100644
--- /dev/null
+++ b/web/utils/device-id.js
@@ -0,0 +1,24 @@
+// @flow
+import crypto from 'crypto';
+
+export const deviceIDTypes = Object.freeze({
+  KEYSERVER: 0,
+  WEB: 1,
+  MOBILE: 2,
+});
+export type DeviceIDType = $Values<typeof deviceIDTypes>;
+
+function getDeviceID(type: DeviceIDType): string {
+  const suffix = crypto.randomBytes(32).toString('hex');
+
+  if (type === deviceIDTypes.KEYSERVER) {
+    return `ks-${suffix}`;
+  } else if (type === deviceIDTypes.WEB) {
+    return `web-${suffix}`;
+  } else if (type === deviceIDTypes.MOBILE) {
+    return `mobile-${suffix}`;
+  }
+  return '';
+}
+
+export { getDeviceID };